在App Script中生成数字的升序列表

时间:2018-06-18 14:13:26

标签: google-apps-script

我有一个导入数据并将其存储在工作表中的代码。我想要的是生成一个数字列表,该列表是结果的长度并将其粘贴在一起,因此它可以是一个带编号的数据列表。

这是我到目前为止,但我收到错误消息“无法找到方法setValues(数字)。”在代码的最后一行。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var mv = ss.getSheetByName("Most Viewed by Country");

lr = mv.getLastRow() + 1;

for (var i = 0; i < results.items.length; i++) {
    var item = results.items[i];

    mv.getRange(lr,4).setValue(item.id);
    mv.getRange(lr,5).setValue(item.snippet.channelTitle)  
    mv.getRange(lr,6).setValue(item.snippet.title);
    mv.getRange(lr,7).setValue(item.statistics.viewCount);
    mv.getRange(lr,1).setValue(new Date());
    mv.getRange(lr,2).setValue('US');

    var array = new Array(results.items.length);   

    for ( var j = 1 ; j < results.items.length; j++) {
        array[j] = j 
        mv.getRange(lr, 3).setValues(j);
    }
    lr++;
}

2 个答案:

答案 0 :(得分:0)

要有效地写入数据,您希望setValues(obj)使用obj ArrayArray的{​​{1}},其中每个内部Array是相同的大小(即obj是一个矩形的2D数组)。鉴于您在开始时有结果,您可以在完成所有操作后编写一次并在JavaScript array内准备:

举个例子:

function writeResults(sheet, results) {
  if (!sheet) throw new Error("Need a Sheet object to write to");
  if (!results || !results.items || !results.items.length) throw new Error("Need results to print");
  // Initialize the output array (and the data headers as the first row).
  const output = [
    ["TimeStamp", "Region", "Rank", "Item ID"]
  ];
  const now = new Date();

  // Add all the items in our result to the output. We assume result.items is
  // already sorted such that the first item has the best rank, and that there are no ties.
  results.items.forEach(function (item, index) {
    var row = [];

    row.push(now);
    row.push("US");
    row.push(1 + index);
    row.push(item.id);

    output.push(row);
  });

  // Erase everything already on the sheet.
  sheet.getDataRange().clear();
  // Ensure the erase is prior to the write.
  SpreadsheetApp.flush();
  // Write the new data into A1:D<N>
  sheet.getRange(1, 1, output.length, output[0].length).setValues(output);
}

显然,您可能希望在输出中添加更多列,并且您可能不想删除给定工作表上的现有数据(而不是写入下一个打开的行),但您应该能够处理那些次要的修改,特别是因为您已经找到了已经找到该Range的开头的代码。这个答案的目的是引导你操纵JavaScript数组,而不是为你完成所有工作:)

以这种方式工作 - 使用批处理方法Range#getValues()Range#setValues() - 是Apps Script "best practice",并确保您拥有及时的代码,不会超出您的每日执行时间配额(非常重要基于时间的触发功能)。

参考文献:

答案 1 :(得分:0)

我明白了。感谢您的所有帮助

`var ss = SpreadsheetApp.getActiveSpreadsheet();     var mv = ss.getSheetByName(“按国家/地区查看最多”);     lr = mv.getLastRow()+ 1;

for (var i = 0; i < results.items.length; i++) {
    var item = results.items[i];

 mv.getRange(lr+i,4).setValue(item.id);
 mv.getRange(lr+i,5).setValue(item.snippet.channelTitle)  
 mv.getRange(lr+i,6).setValue(item.snippet.title);
 mv.getRange(lr+i,7).setValue(item.statistics.viewCount);
 mv.getRange(lr+i,1).setValue(new Date());
 mv.getRange(lr+i,2).setValue('US');
 mv.getRange(lr+i,3).setValue(i+1); `