【问题标题】:Google Sheets API v4 - Method: spreadsheets.values.appendGoogle Sheets API v4 - 方法:电子表格.values.append
【发布时间】:2017-09-16 17:36:36
【问题描述】:

Google Apps 脚本的 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 的 example 在 JSON 有效负载中有范围字段
  • 将代码更改为:{ "range": "Sheet1!A1:D1", "majorDimension": "ROWS", "values": [ ["Door", "$15", " 2", "3/15/2016"], ["引擎", "$100", "1", "3/20/2016"], ] };但它给出了错误:Requested entity was not found. 尽管范围和 sheetId 的所有信息都是正确的。
  • 看起来在电子表格的给定范围内找不到实体 ("USER_ENTERED")。您确定要开始使用此方法吗?就是在sheet中找一些值,在其下添加数据。
  • 如果我删除它,它会显示:Invalid number of arguments provided. Expected 3-4 only。而且您提供的link 还说ValueInputOption [具有选项“USER_ENTERED”] 是必需的。真的很奇怪为什么 Google 没有提供关于 Google Sheets API v4 的完整文档。
  • 为什么不将“USER_ENTERED”更改为该范围内的某个值?是的,v4 文档是一场灾难。

标签: google-apps-script google-sheets google-sheets-api google-apis-explorer


【解决方案1】:

这个样本怎么样?高级 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 欢迎。也谢谢你。
【解决方案2】:

这里的最佳答案对我不起作用。使用 API v4,经过一些试验和错误,以下工作。 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 实在是太多了! ://