【问题标题】:Pass Google Sheet Data to Local Node.js Server via Google App Script通过 Google App Script 将 Google Sheet 数据传递到本地 Node.js 服务器
【发布时间】:2016-05-03 18:38:56
【问题描述】:

我浏览了本指南:https://developers.google.com/apps-script/guides/rest/quickstart/target-script,为 Google Apps 脚本创建了一个快速启动目标。在本节结束时,我按照 Node.js 教程从本地 node.js 服务器执行此脚本:https://developers.google.com/apps-script/guides/rest/quickstart/nodejs

一切顺利!

但是,然后我替换了 Google Apps 脚本中的默认代码

function getFoldersUnderRoot() {
  var root = DriveApp.getRootFolder();
  var folders = root.getFolders();
  var folderSet = {};
  while (folders.hasNext()) {
    var folder = folders.next();
    folderSet[folder.getId()] = folder.getName();
  }
  return folderSet;
}

到这里

function getPressInfo() {

  var spreadsheet = SpreadsheetApp.openById("MY_SHEET_ID");
  var sheets = spreadsheet.getSheets();
  var activeSheet = null;

  for (var i = 0; i < sheets.length; i++) {
    var sheet = sheets[i];
    var name = sheet.getName();
    if (/published/i.test(name)) {
      activeSheet = sheet;
      break;
    }
  }

  if (!sheet) {
    return null;
  }

  var lastRow = sheet.getLastRow();
  var lastCol = sheet.getLastColumn();

  return sheet.getSheetValues(1, 1, lastRow, lastCol);

}

我更新了我的 target 版本,并在我的 node.js 脚本中将我的 function 资源重命名为 getPressInfo。现在我收到一个授权错误...我不知道这是参考 Google 表格(设置为公开可见)、Google Apps 脚本(设置对任何人的访问权限)还是完全不同的东西。错误读取:

The API returned an error:  { [Error: ScriptError]
  code: 401,
  errors: 
   [ { message: 'ScriptError',
       domain: 'global',
       reason: 'unauthorized' } ] }

还有其他人遇到过这个问题吗?我不认为这是 Google Apps 脚本,因为当我使用默认示例回滚到目标时,它仍然有效。如果有帮助,我可以使用虚拟数据重新创建..,但我怀疑我的代码中有一些简单的东西实际上会触发错误。

【问题讨论】:

标签: javascript node.js google-apps-script


【解决方案1】:

好吧,一开始我就完全想多了。 Google 表格对特定格式有一个GET 请求。我使用了tsv,但他们也接受csv。这是我的 node.js 脚本——根本不需要 Google Apps 脚本:

var https = require('https');
var path = require('path');
var fs = require('fs');

var format = 'tsv';
var id = 'ID_OF_GOOGLE_SHEET';

https.get('https://docs.google.com/spreadsheets/d/' + id + '/export?format=' + format + '&id=' + id, function(resp) {

  var body = '';

  resp
    .on('data', function(data) {

      body += ab2str(data);

    })
    .on('end', function() {

      var json = [];
      var rows = body.split(/\r\n/i);

      for (var i = 0; i < rows.length; i++) {
        json.push(rows[i].split(/\t/i));
      }

      fs.writeFileSync(path.resolve(__dirname, './sheet.json'), JSON.stringify(json));
      console.log('Generated sheet.json');

    });

});

function ab2str(buf) {
  return String.fromCharCode.apply(null, new Uint16Array(buf));
}

最值得注意的是这要求您的 Google 表格可以公开查看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多