我收到了一张数据表,每天自动刷新数据。这里是结构:复制和粘贴数据的循环脚本,如何优化
data1 data2 data3 data4 data5 etc...
a1 a2 a3 a4 a5 etc...
b1 b2 b3 b4 b5 etc...
c1 c2 c3 c4 c5 etc...
我写了一个脚本来保存这些数据在另一张纸每天。这里是我的脚本:
function savedata() {
var sheet = SpreadsheetApp.openById('my_id').getSheetByName('Sheet1');
var numRows = sheet.getLastRow()-1;
for(var i = 0; i < numRows; i++) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2")
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
var data1 = sheet.getRange('Sheet1!A2:G2').getValues();
sheet.appendRow(data1[0]);
ss.deleteRow(2)
}
}
正如你能理解我通过循环我所有的行复制它们并逐个删除它们一个,直到有一无所有。一切都被添加到第二张纸上。
有没有更有效的方法来完成这项工作?
非常感谢所有的详细解释。但是,这可能是我的错,我应该更清楚,但是在使用脚本时,表2中的数据通过覆盖已存在的内容而被复制。我想累积所有在表格2上每日复制的数据。你明白我的意思吗?谢谢 ! –
@SimonBreton欢迎您!我明白了你的观点,请在我的回答中查看编辑部分。 –
我想补充一些答案,忘记强调:批量操作。代码中的一个非常大的问题是你有一个循环,而你并不需要。只需使用'.getValues()'获取范围内的所有数据,并在目标范围上使用'setValues()'。如果您需要操作正在移动的数据,请在数组内执行操作,而不要在将数据粘贴到电子表格中之后进行操作。 **使用尽可能少的服务调用,这意味着尽可能少的'.getRange()','.getSpreadsheet()''** – Vytautas