google-sheets - Google Sheets api append 方法不在最后一行后添加行

标签 google-sheets append google-sheets-api

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

在我的例子中,当第 30 行之前的所有行都已满时,我使用以下值在第 22 行之后追加一行(使用 python):

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

但我将其插入到标题(第 9 行)之后,并采用了标题的样式。并回应:

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

enter image description here

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

此行为超出了所使用的编程语言/环境,因为我使用他们的 Web 界面测试得到了相同的结果尝试一下!

--更新--

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

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

它的行为符合预期(在末尾添加行)如果我:

  1. 删除虚拟图像或移除其单元格 (A2:C4)
  2. 删除某些文本或删除其单元格 (I2:I6)
  3. 删除从 CG 的其中一列
  4. 删除单元格 B10B11 中网址上的链接(如果我仅删除 B10 链接,数据将添加到两行之间)enter image description here

请通过关注已打开的问题来支持它:Issue Tracker Bug Report

最佳答案

问题和解决方法:

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

当此解决方法反射(reflect)到脚本时,它会变成如下所示。

示例 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 .

结果:

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

enter image description here

引用文献:

添加:

根据您的以下回复,

I don't know anything about Web Apps created by Google Apps Script as the wrapper API. I'll look on it. Can you provide some docs?

您可以在https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script#samplesituations查看示例情况但是,我认为如果您想在您的情况下使用此方法,则需要创建脚本来实现您的目标。因此,作为 append 信息,针对您的情况,我想介绍一下使用 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。部署网络应用程序。

详细信息可见the official document .

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

3。测试。

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

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

引用文献:

关于google-sheets - Google Sheets api append 方法不在最后一行后添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67059068/

相关文章:

javascript - Jquery Append函数,向有序列表和无序列表添加更多元素

go - 在 Go 中连接两个 slice

javascript - 用于 ai SEO 网站审核的 Google Sheet Script 的权限问题

php - google-sheets api 未触发 google 表格中的 onEdit 功能

java - 通过 Google Sheets api v4 将新工作表添加到现有电子表格

validation - 如何在 Google 表格中执行动态/相关下拉菜单?

google-apps-script - 列出文件夹中的所有文件ID(无子文件夹)

jquery - 如何 append xmlns :fb ="http://www.facebook.com/2008/fbml" to my CMS's html tag

google-apps-script - 如何获取 Google 电子表格时区偏移字符串而不是时区字符串?

javascript - 根据另一个电子表格更新电子表格