gre*_*gn3 7 google-sheets node.js google-apps-script google-cloud-functions
我正在尝试以与此处spreadsheets.values.batchUpdate所述相同的方式使用 Google Sheets API函数。此示例使用 Google Apps 脚本。我想使用 Google Cloud Functions 来代替。
电子表格.values.batchUpdate API 文档可用。请注意,它与电子表格.batchUpdate不同,后者具有不同的语法。我有兴趣使用前者。
我想使用环境做同样的事情:Google Cloud Functions + nodejs8 + googleapismodule。
这是上面链接中的 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);
}
Run Code Online (Sandbox Code Playgroud)
。
这是新环境下的上述代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
但这会产生以下错误:
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] ]
我的问题是,如何将资源参数格式化为spreadsheets.values.batchUpdate()才能使请求成功?
我找不到任何关于此的文档,但从上面的原始代码示例来看似乎是可能的。
如果我的理解是正确的,那么这个修改怎么样?
var resource = {
spreadsheetId: spreadsheetId,
auth: auth,
valueInputOption: "USER_ENTERED",
data: data
};
Run Code Online (Sandbox Code Playgroud)
var resource = {
spreadsheetId: spreadsheetId,
auth: auth,
resource: { data: data, valueInputOption: "USER_ENTERED" }
};
Run Code Online (Sandbox Code Playgroud)
如果这没有解决您的问题,我深表歉意。
| 归档时间: |
|
| 查看次数: |
14084 次 |
| 最近记录: |