需要有关无法在Google应用程序脚本上运行的脚本的帮助。我有一个sheet1,其中colA是日期,而colB是ID。在sheet2上,我具有相同的ID,但可以在任何行中(不按顺序)。因此,脚本应找到该ID,然后将日期复制到col P(sheet2)的colA(sheet1)上。 这里的脚本什么都不做。在此先感谢您的帮助。
function CopyDate() {
ss = SpreadsheetApp.openById('Name');
sheetA = ss.getSheetByName('Sheet1');
dataA = sheetA.getRange('A:B').getValues();
sheetB = ss.getSheetByName('Sheet2');
dataB = sheetB.getRange('A:P').getValues();
for(var i = 0; i > sheetA.getLastRow(); i++) {
if (dataA[2][i] == dataB[1][i]) {
var value = sheetA.getRange(i+1, 1).getValue();
sheetB.getRange(i+1, 16).setValue(value);
}
}
}
答案 0 :(得分:0)
如果我的理解是正确的,那么该修改如何?
for(var i = 0; i > sheetA.getLastRow(); i++){
,在这种情况下,由于i > sheetA.getLastRow()
,不使用for循环。dataA
和dataB
是2维数组,例如[[columnA of row1, columnB of row1],[columnA of row2, columnB of row2],,,]
。因此,在dataA[2][i] == dataB[1][i]
,比较“ Sheet1”的第2行和“ Sheet2”的第1行。setValue()
时,成本会很高。因此,在创建放置值之后,请使用setValues()
放置值。var dataA = sheetA.getRange(1, 1, sheetA.getLastRow(), 2).getValues()
而不是sheetA.getRange('A:B').getValues()
,则可以降低处理成本。当以上几点反映到您的脚本中时,它如下所示。
function CopyDate() {
var ss = SpreadsheetApp.openById('Name'); // If you want to use openById(), please replace the Spreadsheet ID to ``Name``.
var sheetA = ss.getSheetByName('Sheet1');
var dataA = sheetA.getRange(1, 1, sheetA.getLastRow(), 2).getValues();
var sheetB = ss.getSheetByName('Sheet2');
var dataB = sheetB.getRange(1, 1, sheetB.getLastRow(), 1).getValues();
var values = dataB.map(function(e) {
var t = dataA.filter(function(f) {return f[1] == e[0]});
return t.length > 0 ? [t[0][0]] : [""];
});
sheetB.getRange(1, 16, values.length, 1).setValues(values); // 16 means the column "P".
}
Name
中看到ss= SpreadsheetApp.openById( 'Name');
。如果您使用电子表格名称,请使用电子表格ID。如果我误解了,请忽略。如果这不是您想要的结果,我深表歉意。那时,为了正确了解您的情况,您可以提供示例电子表格吗?当然,请从中删除您的个人信息。这样,我想修改脚本。