2013-03-25 83 views
10

Tôi đang học Tập lệnh Google Apps để sử dụng với Bảng tính Google.Cách lặp dải ô và đặt giá trị trong cột liền kề

Tôi có danh sách URL trong một cột và tôi muốn viết một tập lệnh để lấy phần tử tiêu đề từ mỗi URL và viết nó vào ô liền kề. Tôi đã thực hiện điều này cho một tế bào cụ thể theo kịch bản sau đây:

function getTitles() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("url_list"); 
    var range = sheet.getRange("G3"); 
    var url = range.getValue(); 

    var response = UrlFetchApp.fetch(url); 
    var doc = Xml.parse(response.getContentText(),true); 
    var title = doc.html.head.title.getText(); 
    var output = sheet.getRange("H3").setValue(title); 

    Logger.log(title); 
    return title; 
} 

này được URL trong G3, phân tích nó, kéo phần tử và viết các đầu ra trong H3.

Bây giờ tôi có khối xây dựng cơ bản này, tôi muốn lặp lại toàn bộ cột G và ghi đầu ra vào ô liền kề nhưng tôi bị kẹt. ai đó có thể chỉ cho tôi phương hướng đúng không?

Trả lời

21

Có thể giống như thế này:

function getTitles() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("url_list"); 
    var urls = sheet.getRange("G3:G").getValues(); 
    var titleList = [], newValues = [], 
     response, doc, title; 

    for (var row = 0, var len = urls.length; row < len; row++) { 
    if (urls[row] != '') { 
     response = UrlFetchApp.fetch(urls[row]); 
     doc = Xml.parse(response.getContentText(),true); 
     title = doc.html.head.title.getText(); 
     newValues.push([title]); 
     titleList.push(title); 
     Logger.log(title); 
    } else newValues.push([]); 
    } 

    Logger.log('newValues ' + newValues); 
    Logger.log('titleList ' + titleList); 

    // SET NEW COLUMN VALUES ALL AT ONCE! 
    sheet.getRange("H3").offset(0, 0, newValues.length).setValues(newValues); 
    return titleList; 
} 
+1

Cảm ơn bạn Bryan, đó là rất thanh lịch. Tôi có thể hỏi, bạn sử dụng mảng trong giải pháp này và đẩy. Hiệu suất khôn ngoan, hiện có bất kỳ lợi thế cụ thể nếu bạn có một số lượng lớn các hàng? Cảm ơn bạn đã dành thời gian để đăng bài này! – needlesslosses

+0

Lợi thế so với giải pháp thay thế nào? Tôi đã đẩy tới 2 mảng b/c Tôi không biết liệu bạn có cần trả lại 1 (titleList) không có giá trị rỗng không. –

+0

Lợi thế hơn khi thực hiện một vòng lặp và đẩy từng giá trị khi nó có sẵn. Mã của tôi (không phải rất đẹp) chậm hơn nhiều để trả lời câu hỏi của tôi. Cảm ơn một lần nữa! – needlesslosses

Các vấn đề liên quan