附加到 Google 表格中的筛选范围时,appendRow 不起作用

问题描述 投票:0回答:3

我编写了一个脚本,该脚本应该将一行附加到 Google 表格中的过滤范围。我的脚本在正常情况下可以工作。但是,当删除目标范围的最后一行并且在其中一个字段上过滤该范围时(下图说明了这种情况),appendRow 不起作用。

appendRow 起作用/不起作用的情况的屏幕截图:

[spreadsheet samples]1

这是我的代码:

function myFunction() {
  outputRowArray = [1,2];
  destinationUrl = "XXX";
  destinationSheet = "Sheet1"

  SpreadsheetApp.openByUrl(destinationUrl).getSheetByName(destinationSheet).appendRow(outputRowArray);  
}

google-apps-script google-sheets
3个回答
0
投票

您缺少

appendRow
在工作表中追加一行,这意味着该行是在工作表中包含数据的最后一行之后添加的。此外,您还缺少过滤器边界仅在插入属于过滤器范围一部分的行/列时更新(这应该在两行/列之间完成),但在附加它们时不会更新(在过滤器范围的最后一行/列) 过去我看到过类似的问题,声称appendRows不起作用,但发生的情况是工作表包含一些值(有时是空字符串),屏幕上显示的行下面的几行。

为了帮助您了解正在发生的情况,请使用

Class Sheets

方法记录一些工作表特征,例如

    getLastRow()
  • 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);
}



0
投票

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]) }



0
投票

    拥有一张在所有列中启用过滤器的工作表 -
  1. image

    ;

  2. 仅使用“DSPACE”过滤列代码。请注意,过滤所有列后,过滤器中出现“空格”选项;
  3. 现在,运行以下代码:

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 }

如果未过滤范围,而是使用“空格”进行过滤,或者过滤器
仅适用于正确的列

,则行会正确附加。 否则,数据就会消失,不会出现任何错误。 不知道这是否是预期的,但至少,我们可以复制这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.