如果缺少主工作表中的新数据,我试图检查目标工作表。如果是这样,它将新数据从主表中的3列复制到目标表。我最后收到错误,因为我的数组未定义,我不确定如何解决问题。错误是TypeError:无法读取属性" length"来自undefined。 (第27行,文件"代码")
第27行是第二行到最后一行(.setValues(arr);)
function Copy() {
var sourceSheet = SpreadsheetApp.openById('1iyxDeeKoPdVwl15bXTOeorbHylw_i39BsM4NQnxDeiY')
.getSheetByName('Jobs Log');
var lastRow = sourceSheet.getLastRow();
if (prevLastRow == undefined) {
prevLastRow = (sourceSheet.getLastRow() -1);
}
else {
var prevLastRow = PropertiesService.getScriptProperties.getProperty('lastRow');
}
if (lastRow <= prevLastRow) {
return;
}
var range = sourceSheet.getRange(prevLastRow,
1,
lastRow - prevLastRow,
sourceSheet.getLastColumn()
);
var arr = [];
var rangeval = range.getValues()
.forEach(function (r, i, v) {
if (r[i][1] == 'Amber') arr.push([v[i][0], v[i][3], v[i][2]]);
});
var destinationSheet = SpreadsheetApp.openById('1UXPyPmOcsLzyBXAzKax8oVVvUSRC8bfgLP2S7j2F9Yw')
.getSheetByName('Sheet1');
destinationSheet.getRange(destinationSheet.getLastRow() +1, 1, arr.length, arr[0].length)
.setValues(arr);
PropertiesService.getScriptProperties.setProperty('lastRow', lastRow)
}
编辑: 我已将第一个If语句更改为以下内容:
if (prevLastRow == undefined) {
prevLastRow = 1;
}
else {
var prevLastRow = PropertiesService.getScriptProperties.getProperty('lastRow');
}
这将返回另一个电子表格中的值,但它不会保存最后一行,因为我试图在主代码的最后一行中进行操作。
第二次编辑:此代码有效,但不会复制最后一行:
function Copy() {
var sourceSheet = SpreadsheetApp.openById('1iyxDeeKoPdVwl15bXTOeorbHylw_i39BsM4NQnxDeiY')
.getSheetByName('Jobs Log');
var lastRow = sourceSheet.getLastRow();
if (PropertiesService.getScriptProperties().getProperty('lastRow') == undefined) {
prevLastRow = 1;
}
else {
var prevLastRow = PropertiesService.getScriptProperties().getProperty('lastRow');
}
if (lastRow <= prevLastRow) {
return;
}
var range = sourceSheet.getRange(prevLastRow,
1,
lastRow - prevLastRow,
sourceSheet.getLastColumn()
);
var arr = [];
var rangeval = range.getValues()
.forEach(function (r, i, v) {
if (r[1] == 'Amber') arr.push([v[i][0], v[i][3], v[i][2]]);
});
var destinationSheet = SpreadsheetApp.openById('1UXPyPmOcsLzyBXAzKax8oVVvUSRC8bfgLP2S7j2F9Yw')
.getSheetByName('Sheet1');
destinationSheet.getRange(destinationSheet.getLastRow() +1, 1, arr.length, arr[0].length)
.setValues(arr);
PropertiesService.getScriptProperties().setProperty('lastRow', lastRow)
}
答案 0 :(得分:0)
这是一个适用于寻找类似内容的人的工作版本。 :)
我上次编辑的解决方案是改变开始的行&#34; var range = ...&#34;将lastRow - prevLastRow更改为(lastRow - prevLastRow)+1并记录最后一行。
function Copy() {
var sourceSheet = SpreadsheetApp.openById('1iyxDeeKoPdVwl15bXTOeorbHylw_i39BsM4NQnxDeiY')
.getSheetByName('Jobs Log');
var lastRow = sourceSheet.getLastRow();
if (PropertiesService.getScriptProperties().getProperty('lastRow') == undefined) {
prevLastRow = 1;
}
else {
var prevLastRow = PropertiesService.getScriptProperties().getProperty('lastRow');
}
if (lastRow <= prevLastRow) {
return;
}
var range = sourceSheet.getRange(prevLastRow,
1,
(lastRow - prevLastRow)+1 ,
sourceSheet.getLastColumn()
);
var arr = [];
var rangeval = range.getValues()
.forEach(function (r, i, v) {
if (r[1] == 'Amber') arr.push([v[i][0], v[i][3], v[i][2]]);
});
var destinationSheet = SpreadsheetApp.openById('1UXPyPmOcsLzyBXAzKax8oVVvUSRC8bfgLP2S7j2F9Yw')
.getSheetByName('Sheet1');
destinationSheet.getRange(destinationSheet.getLastRow(), 1, arr.length, arr[0].length)
.setValues(arr);
PropertiesService.getScriptProperties().setProperty('lastRow', lastRow)
}