假设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"
MySheet!A13
或 MySheet!A14
或 MySheet!A14:C14
也无法在 13/14 之后输入一行第 - 行。
此行为超出了所使用的编程语言/环境,因为我使用他们的 Web 界面测试得到了相同的结果尝试一下!
。
--更新--
这是一个test sheet 。如果您制作一个副本并在其上运行测试,那就更好了。
这是test data我想追加。您可以使用相同的表单,只需将 spreadsheetId
替换为您的副本即可。您可以看到范围设置为 test
这意味着它必须搜索工作表内的所有表格,找到最后一个表格,并在其后面添加数据。但数据已添加到第 10 行。
它的行为符合预期(在末尾添加行)如果我:
- 删除虚拟图像或移除其单元格 (A2:C4)
- 删除
某些文本
或删除其单元格 (I2:I6) - 删除从 C 到 G 的其中一列
- 删除单元格 B10 和 B11 中网址上的链接(如果我仅删除 B10 链接,数据将添加到两行之间)
请通过关注已打开的问题来支持它: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”表中。
引用文献:
添加:
根据您的以下回复,
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 .
- 在脚本编辑器中,请点击脚本编辑器右上角的“单击部署”->“新建部署”。
- 请点击“选择类型”->“网络应用”。
- 请在“部署配置”下的字段中输入有关 Web 应用程序的信息。
- 请为“执行为”选择“我”。
- 这就是此解决方法的重要性。
- 请为“谁有权访问”选择“任何人”。
- 在这种情况下,用户不需要使用访问 token 。因此,请将其用作测试用例。
- 当然,您可以使用访问 token 访问网络应用程序。在这种情况下,请设置为
Anyone with Google account
或Only myself
。当您想要使用访问 token 时,请包含 Drive API 的范围,例如https://www.googleapis.com/auth/drive.readonly
和https://www.googleapis.com/auth/drive
.
- 请点击“部署”按钮。
- 复制 Web 应用程序的 URL。就像
https://script.google.com/macros/s/###/exec
。- 当您修改 Google Apps 脚本时,请将部署修改为新版本。这样,修改后的脚本就会反射(reflect)到Web Apps中。请小心这一点。
- 您可以在“Redeploying Web Apps without Changing URL of Web Apps for new IDE”的报告中查看详细信息。
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/