我有一个导入数据并将其存储在工作表中的代码。我想要的是生成一个数字列表,该列表是结果的长度并将其粘贴在一起,因此它可以是一个带编号的数据列表。
这是我到目前为止,但我收到错误消息“无法找到方法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++;
}
答案 0 :(得分:0)
要有效地写入数据,您希望setValues(obj)
使用obj
Array
个Array
的{{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); `