gpt4 book ai didi

node.js - 如何将电子表格.values.batchUpdate 与 Google Cloud Functions 和 NodeJS 以及 'googleapis' 模块结合使用

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:39 27 4
gpt4 key购买 nike

我正在尝试使用 Google Sheets API spreadsheets.values.batchUpdate功能与描述相同here 。此示例使用 Google Apps 脚本。我想改用 Google Cloud Functions 来完成此操作。

spreadsheets.values.batchUpdate API 文档可用。请注意,它与spreadsheets.batchUpdate不同。 ,它有不同的语法。我有兴趣使用前者。

我想使用以下环境执行相同的操作:Google Cloud Functions + nodejs8 + googleapis模块。

这是上面链接中的 Google Apps 脚本的示例代码:

function updateGoogleSheet(spreadsheetId) {

/* Written by Amit Agarwal */
/* Web: ctrlq.org Email: amit@labnol.org */

var data = [
{
range: "Sheet1!A1", // Update single cell
values: [
["A1"]
]
},
{
range: "Sheet1!B1:B3", // Update a column
values: [
["B1"],["B2"],["B3"]
]
},
{
range: "Sheet1!C1:E1", // Update a row
values: [
["C1","D1","E1"]
]
},
{
range: "Sheet1!F1:H2", // Update a 2d range
values: [
["F1", "F2"],
["H1", "H2"]
]
}];

var resource = {
valueInputOption: "USER_ENTERED",
data: data
};

Sheets.Spreadsheets.Values.batchUpdate(resource, spreadsheetId);

}

.

这是新环境中的上述代码:

const {google} = require('googleapis');
const sheets = google.sheets({version: 'v4'});
const auth = new google.auth.JWT (credentials.client_email, null, credentials.private_key, ['https://www.googleapis.com/auth/spreadsheets']);

function updateGoogleSheet (spreadsheetId) {

/* Written by Amit Agarwal */
/* Web: ctrlq.org Email: amit@labnol.org */

var data = [
{
range: "Sheet1!A1", // Update single cell
values: [
["A1"]
]
},
{
range: "Sheet1!B1:B3", // Update a column
values: [
["B1"],["B2"],["B3"]
]
},
{
range: "Sheet1!C1:E1", // Update a row
values: [
["C1","D1","E1"]
]
},
{
range: "Sheet1!F1:H2", // Update a 2d range
values: [
["F1", "F2"],
["H1", "H2"]
]
}];

var resource = {
spreadsheetId: spreadsheetId,
auth: auth,
valueInputOption: "USER_ENTERED",
data: data
};

sheets.spreadsheets.values.batchUpdate (resource);

}

但是这会出现以下错误:

Error: Invalid JSON payload received. Unknown name "data[range]": Cannot bind query parameter. Field 'data[range]' could not be found in request message. Invalid JSON payload received. Unknown name "data[values]": Cannot bind query parameter. Field 'data[values]' could not be found in request message. at Gaxios.request (/srv/node_modules/gaxios/build/src/gaxios.js:70:23) at <anonymous> at process._tickDomainCallback (internal/process/next_tick.js:229:7) response: { config: [Object], data: [Object], headers: [Object], status: 400, statusText: 'Bad Request' }, config: { url: 'https://sheets.googleapis.com/v4/spreadsheets/......spreadsheetId....../values:batchUpdate?valueInputOption=USER_ENTERED&data%5Brange%5D=Sheet1%21A1&data%5Bvalues%5D=A1&data%5Brange%5D=Sheet1%21B1%3AB3&data%5Bvalues%5D=B1&data%5Bvalues%5D=B2&data%5Bvalues%5D=B3&data%5Brange%5D=Sheet1%21C1%3AE1&data%5Bvalues%5D=C1&data%5Bvalues%5D=D1&data%5Bvalues%5D=E1&data%5Brange%5D=Sheet1%21F1%3AH2&data%5Bvalues%5D=F1&data%5Bvalues%5D=F2&data%5Bvalues%5D=H1&data%5Bvalues%5D=H2', method: 'POST', paramsSerializer: [Function], headers: [Object], params: [Object], validateStatus: [Function], retry: true, responseType: 'json', retryConfig: [Object] }, code: 400, errors: [ [Object] ]

我的问题是,如何将resource参数格式化为spreadsheets.values.batchUpdate()才能使请求成功?

我找不到任何相关文档,但从上面的原始代码示例来看似乎是可能的。

最佳答案

  • 您想使用Sheets API的spreadsheets.values.batchUpdate方法来放置值。
  • 您希望使用 googleapis 和 Node.js 来实现此目的。
  • 您已经能够使用 Sheets API 为电子表格添加和获取值。

如果我的理解是正确的,那么修改一下怎么样?

来自:

var resource = {
spreadsheetId: spreadsheetId,
auth: auth,
valueInputOption: "USER_ENTERED",
data: data
};

致:

var resource = {
spreadsheetId: spreadsheetId,
auth: auth,
resource: { data: data, valueInputOption: "USER_ENTERED" }
};

注意:

  • 如果出现错误,请确认以下几点。
    • 电子表格与服务帐户共享。
    • Sheets API 已启用。
  • 我可以确认上述修改的脚本可以在 Node.js v8.0.0 和 v12.9.0(最新)上与 v42.0.0(最新)的 googleapis 配合使用。

引用:

如果这没有解决您的问题,我深表歉意。

关于node.js - 如何将电子表格.values.batchUpdate 与 Google Cloud Functions 和 NodeJS 以及 'googleapis' 模块结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57618668/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com