首页 > 解决方案 > 通过 Google Sheets API 更新我的数据时出现问题

问题描述

我想通过 Google Sheets API 更新我的 Google 表格数据。看起来连接到 Google 的服务器并发送请求成功。但是我的 Google 表格数据没有更新。并且 response:result.updatedCells 是未定义的。我哪里做错了?

function listMajors(auth) {
    var body = {
        values: [["2"]]
    };
    sheets.spreadsheets.values.update({
        spreadsheetId: '{MyGoogleSheetsId}',
        range: "table2!K2"+"?valueInputOption=RAW",
        majorDimension:'ROWS',
        auth: auth,
        resource: body
    }, function(err, result) {
        if(err)
            console.log(err);
        else 
            console.log('updateRange: '+result.updatedRange);
            console.log('updatedCells: '+result.updatedCells);
            console.log('updatedRows '+result.updatedRows);
        });
    }
}

范围响应的值是可以的,但是其他的响应是不确定的 虽然服务器已经收到了我的请求。我的 Google 表格仍然没有更新。

标签: node.jspostgoogle-sheetsgoogle-apiupdates

解决方案


这个改装怎么样?

修改点:

  • 请把 的属性放到majorDimension资源对象中。
  • 请修改range: "table2!K2"+"?valueInputOption=RAW",
  • 您可以通过 检索结果result.data

修改后的脚本:

function listMajors(auth) {
  var body = {
    majorDimension: "ROWS", // Added
    values: [["2"]],
  };
  sheets.spreadsheets.values.update({
    spreadsheetId: '{MyGoogleSheetsId}',
    range: "table2!K2", // Modified
    valueInputOption: "RAW", // Modified
    auth: auth,
    resource: body,
  }, function(err, result) {
    if (err) {
      console.log(err); // or console.log(err.errors);
      return;
    }
    console.log('updateRange: '+result.data.updatedRange); // Modified
    console.log('updatedCells: '+result.data.updatedCells); // Modified
    console.log('updatedRows '+result.data.updatedRows); // Modified
  });
}

笔记:

  • 这个修改后的脚本假设有以下几点。
    • 您的环境可以使用 Sheets API 更新电子表格。
    • sheets被宣布。
  • 如果这不起作用,您可以尝试使用最新版本的 googleapis 吗?

参考:

在我的环境中,我确认这个修改后的脚本有效。如果这在您的环境中不起作用,我很抱歉。

编辑:

在我的环境中,我确认修改后的脚本使用 googleapis 版本 27.0.0 和最新版本 (35.0.0) 可以正常工作。不幸的是,我无法复制您的情况。所以我想提出其他方法。

示例脚本:

此脚本使用 Sheets API 的 values.update 方法更新电子表格。此脚本使用auth您的脚本。使用此脚本时,请将脚本修改为listMajors(auth)以下脚本。

function listMajors(auth) {
  const request = require('request');

  const spreadsheetId = '{MyGoogleSheetsId}';
  const range = "table2!K2";
  auth.getRequestHeaders()
  .then(function(e) {
    var body = {
      majorDimension: "ROWS",
      values: [["2"]],
    };
    var options = {
      uri: `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${range}?valueInputOption=RAW`,
      method: "put",
      headers: e,
      json: body,
    };
    request(options, function(err, res, result){
      if (err) {
        console.log(err);
        return;
      }
      console.log(result);
    });
  });
}

推荐阅读