通过Google App脚本将Google表单数据传递给本地Node.js服务器

我阅读了本指南: https : //developers.google.com/apps-script/guides/rest/quickstart/target-script ,为Google Apps脚本创build快速启动目标。 在本节的最后,我遵循Node.js教程从本地node.js服务器执行此脚本: https : //developers.google.com/apps-script/guides/rest/quickstart/nodejs

这一切工作!

但是,我从这里replace了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脚本getPressInfo我的function资源重命名为getPressInfo 。 现在我得到一个授权错误…我不知道这是否涉及到Google表格(设置为公开可见),Google Apps脚本(设置访问任何人),或者完全不同的东西。 错误如下:

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

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

好吧,我完全是在考虑开始的任务。 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表格公开显示。