无法使用Google表格API创建新的电子表格

时间:2016-11-05 23:15:49

标签: node.js google-drive-api google-sheets-api

我使用googleapis软件包创建了新的Google电子表格,但它失败了。当我使用web-based tools in the Google API documentation时,相同的请求有效。

Google.prototype.createSheet = function(filename, callback) {
    var services = google.sheets('v4');
    services.spreadsheets.create({
      properties : {title:filename},
      auth       : this.auth
    }, function(err,response) {
      if( err ) {
        console.log('Error : unable to create file, ' + err);
        return;
      } else {
        console.dir(response);
      }
    });
}

结果,

  

错误:无法创建文件,错误:收到的JSON有效负载无效。   未知名称"属性":无法绑定查询参数。领域   '属性'在请求消息中找不到。

我还尝试使用"资源"的属性名称。而不是"属性"因为我发现在其他工作表端点。当我调试googleapis代码时,这也没有起作用,但导致了不同的错误消息以及不同的API请求。

  

错误:无法创建文件,错误:收到的JSON有效负载无效。   未知名称"标题" at'电子表格':找不到字段。

我还尝试使用云端硬盘API without success创建文件。

2 个答案:

答案 0 :(得分:5)

哇。原来答案是我的两个实验的混合。封装资源块内的属性。

Google.prototype.createSheet = function(filename, callback) {
    var services = google.sheets('v4');
    services.spreadsheets.create({
      resource : {properties:{title:filename}},
      auth       : this.auth
    }, function(err,response) {
      if( err ) {
        console.log('Error : unable to create file, ' + err);
        return;
      } else {
        console.dir(response);
      }
    });
}

我在Google API documentation中看不到 任何 ,表明这是发送请求的正确方式,因此这不是'即使它有效,也会非常安慰。

答案 1 :(得分:0)

我建议将JWT / OAuth2.0用于可以通过Google Cloud Platform设置的服务帐户,如下所示:

const {google} = require('googleapis');
let sheets = google.sheets('v4');

const serviceAccount = { INSERT_JSON_HERE  };

const client = new google.auth.JWT(
    serviceAccount.client_email,
    null,
    serviceAccount.private_key,
    ['https://www.googleapis.com/auth/spreadsheets', 
    'https://www.googleapis.com/auth/drive', 
    'https://www.googleapis.com/auth/drive.file'],
    null
);

  return new Promise((resolve, reject) => {
        sheets.spreadsheets.create({
            auth: client,
        }, (err, obj) => {
        if (err) {
            console.log(err);
            reject(err);
        } else {
            console.log(`New Spreadsheet ID: ${obj.data.spreadsheetId}`);
            resolve(obj);
        }
    });