我编写了一个脚本,该脚本应该将一行附加到 Google 表格中的过滤范围。我的脚本在正常情况下可以工作。但是,当删除目标范围的最后一行并且在其中一个字段上过滤该范围时(下图说明了这种情况),appendRow 不起作用。
appendRow 起作用/不起作用的情况的屏幕截图:
这是我的代码:
function myFunction() {
outputRowArray = [1,2];
destinationUrl = "XXX";
destinationSheet = "Sheet1"
SpreadsheetApp.openByUrl(destinationUrl).getSheetByName(destinationSheet).appendRow(outputRowArray);
}
您缺少
appendRow
在工作表中追加一行,这意味着该行是在工作表中包含数据的最后一行之后添加的。此外,您还缺少过滤器边界仅在插入属于过滤器范围一部分的行/列时更新(这应该在两行/列之间完成),但在附加它们时不会更新(在过滤器范围的最后一行/列)
过去我看到过类似的问题,声称appendRows不起作用,但发生的情况是工作表包含一些值(有时是空字符串),屏幕上显示的行下面的几行。
为了帮助您了解正在发生的情况,请使用
Class SheetsgetLastRow()
getMaxRows()
Logger.log(something)
和
console.log(something)
。有关更多详细信息,请查看 https://developers.google.com/apps-script/guides/support/troubleshooting还可以尝试的其他方法是在附加新行后记录最后一行,但请记住,您可能需要先使用
SpreadsheetApp.flush()
。示例:
function myFunction() {
outputRowArray = [1,2];
destinationUrl = "XXX";
destinationSheet = "Sheet1"
var sheet = SpreadsheetApp.openByUrl(destinationUrl).getSheetByName(destinationSheet);
sheet.appendRow(outputRowArray);
SpreadsheetApp.flush();
var lastRow = sheet.getLastRow();
console.info(lastRow);
}
function myFunction() {
outputRowArray = [1,2];
destinationUrl = "XXX";
destinationSheet = "Sheet1"
var sheet = SpreadsheetApp.openByUrl(destinationUrl).getSheetByName(destinationSheet)
var last_row = sheet.getLastRow()
var insert_range = sheet.getRange(last_row+1,1,1,outputRowArray.length()) // not really sure that I got right the dims
insert_range.setValues([outputRowArray])
}
function myFunction() {
let sheet = SpreadsheetApp.openByUrl(sheetUrl);
Logger.log(sheet.getLastRow()); // in this case, returns 4
sheet.appendRow([new Date(), 'DSPACE', 'TEST 4']);
sheet.appendRow([new Date(), 'DSPACE', 'TEST 5']);
sheet.appendRow([new Date(), 'DSPACE', 'TEST 6']);
Logger.log(sheet.getLastRow()); // with 'DSPACE' filter, returns 4, else, returns 7
}
如果未过滤范围,而是使用“空格”进行过滤,或者过滤器仅适用于正确的列
,则行会正确附加。 否则,数据就会消失,不会出现任何错误。 不知道这是否是预期的,但至少,我们可以复制这个问题。