我编写了一个脚本,必须将数据从一个电子表格复制到另一个电子表格以及日期戳。
我无法实现这一点,你能帮助我吗,因为我是脚本的新手。
function triggerOnTime() {
var SpreadSheetKeyA = "MY key";
var SpreadSheetKeyB = "MY key";
var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getActiveSheet();
var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getActiveSheet();
var data = sheet1.getRange(5,11,10,5).getValues();
var time = new Date ();
var array = [];
for (var y = 1; y < data.length; y++) {
for (var x = 0; x < 5; x++){
array.push(data[y][x]);
}
sheet2.appendRow([time,array]);
array = []; //reset the array contents
}
}
电子表格-1:电子表格-1中的数据,
Name apple android windows linux
Germany 3 4 6 7
America 4 1 6 2
Sweden 1 6 1 6
Paris 5 0 2 4
电子表格-2:电子表格-2中的数据,
Date Name apple android windows linux
电子表格1中的数据每天都会更改。我想在电子表格1中出现新数据时将数据备份到电子表格-2。这就像每天用日期戳创建数据日志。
答案 0 :(得分:0)
您需要在数组中添加时间,而不是作为appendrow的另一个参数。即在调用appendRow之前的array.push(time)。如果你希望它成为第一列,或者在数组的开头推送它。
还要看另一个答案,它显示如何优化vy执行单个api调用,但是你需要修改数组才能时间戳。
答案 1 :(得分:0)
function triggerOnTime() {
var SpreadSheetKeyA = "MY key";
var SpreadSheetKeyB = "MY key";
var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getSheetByName("Source Name");
var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getSheetByName("Target Name");
var data = sheet1.getRange(5,11,10,5).getValues();
var time = new Date ();
for (var r = 0; r < data.length; r++) {
data[r].unshift(time);
sheet2.appendRow(data[r]);
}
}
数据[R] .unshift(时间);在附加到sheet2之前将时间添加到行数组的开头。
如果在脚本的每次运行中都会对sheet2进行大量添加,则不应在循环内使用appendRow(),并且应该修改数组,然后在一次操作中将其添加到sheet2,如下所示
function triggerOnTime() {
var SpreadSheetKeyA = "MY key";
var SpreadSheetKeyB = "MY key";
var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getSheetByName("Source Name");
var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getSheetByName("Target Name");
var data = sheet1.getRange(5,11,10,5).getValues();
var time = new Date ();
for (var r = 1; r < data.length; r++) {
data[r].unshift(time);
}
sheet2.insertRowsAfter(sheet2.getLastRow(), data.length);
sheet2.getRange(sheet2.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
}
您应该使用getSheetByName()而不是getActiveSheet()。即使它现在有效,但是在使用触发器时,稍后添加工作表会使事情变得混乱。