【问题标题】:How to Append Sheet 1 to output in Sheet 2 in Google Sheets from JSON imported data如何从 JSON 导入的数据将工作表 1 附加到 Google 工作表的工作表 2 中的输出
【发布时间】:2020-12-07 01:26:21
【问题描述】:

我正在尝试使用以下脚本在 Google 表格中将数据从一张表格复制到另一张表格。看起来这应该是一个非常严格的转发请求,但我只收到 (ljava.lang.Object...) 作为我的输出。我认为这与我使用 ImportJSON() 作为表 1 的输出有关。我已经搞砸了一段时间。

function saveData() {
  var sheetinput = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = sheetinput.getSheets()[0];
  var sheetoutput = SpreadsheetApp.getActiveSpreadsheet();
  var sheet2 = sheetoutput.getSheets()[1];
  var rows = sheet1.getDataRange().getValues();
  
  sheet2.appendRow([rows]); 
} 

【问题讨论】:

标签: javascript json function google-apps-script google-sheets


【解决方案1】:

appendRow() 仅以数组的形式接收一行,但您传递的是Object[][] 的数组,它是getValues() 的输出。您可以直接使用setValues() 方法复制该范围内的所有值:

function saveData() {
  var sheetinput = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = sheetinput.getSheets()[0];
  //var sheetoutput = SpreadsheetApp.getActiveSpreadsheet(); // This is redundant with the variable sheetinput. Both sheets are in the same spreadsheet, so you can use the same variable for the spreadsheet. I'd suggest changing its name as well to something like 'spreadsheet' instead of 'sheetinput'
  var sheet2 = sheetinput.getSheets()[1];
  //var rows = sheet1.getDataRange().getValues();
  //sheet2.appendRow(rows); 
  var sheet1range = sheet1.getDataRange();
  sheet2.getRange(sheet2.getLastRow()+1, 1, sheet1range.getNumRows(), sheet1range.getNumColumns()).setValues(sheet1range.getValues());
} 

编辑:我意识到你想追加,而不仅仅是复制,所以我编辑了最后一行。

【讨论】:

  • 不知道为什么,但此响应提供了以下错误 - “例外:此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。(第 9 行,文件”@mshcruz跨度>
  • 第一张工作表有多少行和多少列?
  • 它是一个导入 JSON,所以它会波动,但通常是 ~3000 行和列 A:G
【解决方案2】:

说明:

您使用appendRow(),所以我假设您想将数据粘贴到最后一行之后,内容从A 列开始。

另外,定义两个具有相同值的变量也不是一个好习惯。也就是说,同时拥有sheetinputsheetoutput 是多余的。

解决方案:

function saveData() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = spreadsheet.getSheets()[0];
  var sheet2 = spreadsheet.getSheets()[1];
  var rows = sheet1.getRange("A1:G"+sheet1.getLastRow()).getValues();
  sheet2.getRange(sheet2.getLastRow()+1,1,rows.length,rows[0].length).setValues(rows);
}

【讨论】:

  • 为了澄清,我想从表 1 中的 importjson() 复制所有数据并将其放入表 2。我的目的是最终创建一个触发器,以便我可以存储来自的 api 数据表 1 即使在表 2 中出于历史目的刷新后。另外,不知道为什么我会收到与 mshcruz 的响应相同的错误“异常:此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。(第 6 行,文件”。大约 3000 行和 A:G 列,所以不应该有那么多单元格。
  • 您得到的错误是不言自明的。您的电子表格文件total超过了 500 万个数据单元格,因此您无法添加更多数据。您不能拥有超过 500 万个单元格数据。这是谷歌的硬性限制。 @JonK 创建一个全新的文件并保留您要复制的必要表格。
  • 我理解错误,但就像我说的那样,只有大约 3000 行,远不及 500 万行。
  • @JonK 您有多少张工作表以及您认为所有工作表总共有多少个单元格? (在同一个工作簿/电子表格中)。硬限制不是每个工作表(工作表),而是每个电子表格(工作簿)。
  • @mshcruz 认为这不是问题所在。但是,如果 OP 不共享电子表格,我们在这里讨论的一切都只是猜测。顺便说一句,我将范围更改为从 A 到 G 。这只是为了确保您只获得所需的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2020-01-03
  • 2017-09-10
  • 2018-02-07
相关资源
最近更新 更多