谷歌表格API v4 - 方法:spreadsheets.values.append

4

在Google Apps Script中,使用Google Sheets API v4方法spreadsheets.values.append时,正确的语法是什么?

我尝试了以下代码,但出现了错误:Invalid JSON payload received.

function appendRow() {
  Sheets.Spreadsheets.Values.append("SpreadsheetID", "Sheet1!A:A", "USER_ENTERED", { "values": [[new Date()]] } );
}

谢谢。

Google的示例在JSON负载中有范围字段。 - user6655984
将代码更改为以下内容:{ "range": "Sheet1!A1:D1", "majorDimension": "ROWS", "values": [ ["门", "$15", "2", "2016年3月15日"], ["引擎", "$100", "1", "2016年3月20日"], ] };但是它会出现错误:“未找到请求的实体。”尽管范围和sheetId的所有信息都是正确的。 - Din
看起来无法在电子表格的给定范围内找到实体(“USER_ENTERED”)。您确定要使用此方法吗?它是用于查找工作表中的某个值并在其下添加数据的。 - user6655984
1
如果我删除它,它会显示:“提供的参数数量无效。仅期望3-4个”。而且您提供的链接也说需要ValueInputOption [具有“USER_ENTERED”选项]。真奇怪为什么Google没有提供完整的Google Sheets API v4文档。 - Din
为什么不将“USER_ENTERED”更改为范围中存在的某个值?是的,v4文档真是一场灾难。 - user6655984
我发现使用通用范围,比如"Sheet1!A:A"来进行追加是不可靠的。在许多情况下,即使在更新之间延迟了很多分钟,现有行仍然被覆盖。解决方案是获取当前的电子表格范围,然后明确指定要追加的范围,比如"Sheet1!A1:F2963"。也许还有其他我忽略的东西(想法?),但现在它可以运行了。 - undefined
2个回答

19

这个示例如何?使用高级 Google 服务的 Sheets.Spreadsheets.Values.append(),可以像下面这样使用 Sheets.Spreadsheets.Values.append(resource, spreadsheetId, range, optionalArgs)。因此,使用您提供的参数,该示例如下。

示例:

var resource = {
  "majorDimension": "ROWS",
  "values": [[new Date()]]
}
var spreadsheetId = "### SpreadsheetID ###";
var range = "Sheet1!A:A";
var optionalArgs = {valueInputOption: "USER_ENTERED"};
Sheets.Spreadsheets.Values.append(resource, spreadsheetId, range, optionalArgs);

@Din 欢迎。谢谢你也。 - Tanaike

8
这里的最佳答案对我来说无效。使用v4 API时,在一些尝试和错误后,以下方法有效。Google Sheets API文档比较混乱,这可能在下一个版本中过时!祝所有使用Sheets API的人好运!
const request = {
    spreadsheetId: 'SHEET_ID',
    range: 'Sheet1!A:B',
    valueInputOption: 'USER_ENTERED',
    insertDataOption: 'INSERT_ROWS',
    resource: {
        "majorDimension": "ROWS",
        "values": [["Row 1 Col 1","Row 1 Col 2"], ["Row 2 Col 1","Row 2 Col 2"]]
    },
    auth: oAuth2Client,
};

try {
    const response = (await sheets.spreadsheets.values.append(request)).data;
    console.log(JSON.stringify(response, null, 2));
} catch (err) {
    console.error(err);
}

非常感谢!难怪人们会使用像gspread这样的封装程序。这个API太复杂了!:/ - Charming Robot
我认为混淆的原因在于谷歌,以其无尽的智慧,决定将Sheets API的V4版本作为RESTful服务API,而“之前”的版本则是一个内部应用脚本服务。根据谷歌自己的文档:“高级Sheets服务允许您使用Apps Script访问Sheets API。与Apps Script内置的Google Sheets API服务类似,此API允许脚本读取等操作...在大多数情况下,内置服务更易于使用,但此高级服务提供了一些额外功能。” - David Ho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接