【问题标题】:Google Sheets api append method is not adding a line after the last rowGoogle Sheets api append 方法没有在最后一行之后添加一行
【发布时间】:2021-04-12 13:14:48
【问题描述】:

假设values.append方法遇到从定义范围的第一行开始的空行时应该添加一行。如果现有行之间没有间隙,则应在定义的范围表的末尾添加一行。

在我的情况下,我使用以下值在例如第 22 行(使用 python)之后追加一行,直到 30 的所有行都已满:

range="MySheet!A22",
valueInputOption="USER_ENTERED",
insertDataOption="INSERT_ROWS",
body={"majorDimension": "ROWS", "values": [['asd', 'asd2']]}

但是我将它插入到标题(第 9 行)之后,并带有标题的样式。作为回应:

"tableRange": "MySheet!A1:C9"
"updatedRange": "MySheet!A10:B10"

MySheet!A13MySheet!A14MySheet!A14:C14 在第 13/14 行之后也无法输入行。

这种行为超出了使用的编程语言/环境,因为我使用他们的 Web 界面测试 Try it! 得到了相同的结果。

-- 更新--

这是test sheet。如果您制作一个副本并在其上运行测试会更好。

这是我要附加的test data。您可以使用相同的表格,只需将spreadsheetId 替换为您的副本。可以看到范围设置为test,这意味着它必须搜索工作表内的所有表,找到最后一个,并在其后添加数据。但是数据是在第 10 行添加的。

如果我这样做,它的行为符合预期(在末尾添加一行):

  1. 删除虚拟图像或移除其单元格 (A2:C4)
  2. 删除some text 或删除其单元格(I2:I6)
  3. CG 中删除其中一列
  4. 删除单元格 B10B11 中 URL 上的链接(如果我只删除 B10 链接,数据会添加到两行之间)

请关注已打开的问题:Issue Tracker Bug Report

【问题讨论】:

  • 很遗憾,我无法理解您的问题与您的示例图像和脚本之间的关系。我为我糟糕的英语水平道歉。我能问一下你当前问题的细节和你的目标吗?通过这个,我想试着理解你的问题。
  • 你好 Serob_b,我也不确定我是否理解。你能分享一份你正在测试的工作表吗?正如您提到的很多范围,但它们在您的屏幕截图中不可见。你读过关于这个主题的guide吗?
  • @Tanaike 请看更新。
  • @iansedano 更新
  • 感谢您添加更多信息。从您更新的问题中,我记得我遇到了与您的情况相同的问题。所以我提出了一个解决方法作为答案。你能确认一下吗?如果这不是您期望的结果,我深表歉意。

标签: google-sheets append google-sheets-api


【解决方案1】:

问题和解决方法:

在使用“spreadsheets.values.append”的方法时,我也遇到过和你一样的情况。在那种情况下,我认为这可能是谷歌方面的当前规范或错误。因此,作为一种解决方法,我已将方法从“spreadsheets.values.append”更改为“spreadsheets.batchUpdate”。在我的环境中,当使用“spreadsheets.batchUpdate”方法的AppendCellsRequest时,我确认问题可以解决。

当这个变通方法反映到脚本时,它变成如下。

curl 命令示例:

curl --request POST \
  'https://sheets.googleapis.com/v4/spreadsheets/[SpreadsheetId]:batchUpdate' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"requests":[{"appendCells":{"sheetId":[sheetId],"rows":[{"values":[{"userEnteredValue":{"stringValue":"sample1"}},{"userEnteredValue":{"stringValue":"sample2"}}]}],"fields":"userEnteredValue"}}]}' \
  --compressed
  • 当您想使用“Try tis API”进行测试时,您也可以使用here

结果:

当我对您的示例电子表格使用上述请求时,得到以下结果。您可以看到这些值已附加到“测试”表中。

参考资料:

补充:

根据您的以下回复,

我对@9​​87654334@ 一无所知。我会看的。可以提供一些文档吗?

您可以在https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script#samplesituations 看到示例情况但是,我认为如果您想针对您的情况使用此方法,则需要创建脚本以实现您的目标。因此,作为附加信息,针对您的情况,我想介绍使用 Web Apps 作为包装 API 的方法。

用法:

1。创建示例脚本。

请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器中,这是您的示例电子表格。

function doPost(e) {
  const sheetName = "test";  // This is the sheet name in your sample Spreadsheet.
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const values = JSON.parse(e.postData.contents);
  sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
  return ContentService.createTextOutput("Done.");
}

2。部署 Web 应用程序。

详细信息可见the official document

  1. 在脚本编辑器上,在脚本编辑器的右上角,请点击“点击部署”->“新建部署”。
  2. 请点击“选择类型”->“Web App”。
  3. 请在“部署配置”下的字段中输入有关Web App的信息。
  4. 请为“执行为”选择“我”
    • 这是此解决方法的重点。
  5. 请为“谁有权”选择“任何人”
    • 在这种情况下,用户不需要使用访问令牌。所以请将此作为测试用例。
    • 当然,您可以使用访问令牌访问 Web 应用程序。在这种情况下,请设置为Anyone with Google accountOnly myself。当您想使用访问令牌时,请包含 Drive API 的范围,例如 https://www.googleapis.com/auth/drive.readonlyhttps://www.googleapis.com/auth/drive
  6. 请点击“部署”按钮。
  7. 复制 Web App 的 URL。就像https://script.google.com/macros/s/###/exec

3。测试。

作为上述 Web Apps 的测试,您可以使用 curl 命令进行测试。在这种情况下,请将 URL 替换为您的 URL。在上述流程中,不需要使用访问令牌。因此,当运行以下 curl 命令时,sample1sample2 的值将放入 test 表的第一个空行的“A”和“B”列。

$ curl -L -d '[["sample1", "sample2"]]' "https://script.google.com/macros/s/###/exec"
  • 运行此 curl 命令时,如果您的设置正确,则返回 Done.

参考资料:

【讨论】:

  • 我会尝试的,但实际上我要输入大约 50 个单元格,并且很难设置每种单元格类型等等。你知道没有这种类型的其他更简单的输入单元格的方法吗细节?
  • @Serob_b 感谢您的回复。我不得不为我糟糕的英语水平道歉。根据您的问题,我没有注意到I'll try it, but actually I am entering around 50 cells and it would be hard to set each cells type and so on.。我对此深表歉意。在这种情况下,例如,使用 Google Apps Script 创建的 Web Apps 作为包装 API 怎么样?如果这不是您期望的方向,我深表歉意。
  • 你不必为任何事情道歉,你的建议真的很有帮助。我对Web Apps created by Google Apps Script as the wrapper API 一无所知。我会看的。可以提供一些文档吗?
  • 这是你的仓库吗? github.com/tanaikech/…
  • @Serob_b 感谢您的回复。关于使用Web Apps作为包装器的示例,您可以在github.com/tanaikech/…看到示例情况但是,我认为如果您要使用此方法,则需要创建脚本以实现您的目标。因此,我在答案中添加了使用此方法的示例流程。你能确认一下吗?
猜你喜欢
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多