我浏览了本指南: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脚本,因为当我使用默认示例回滚到目标时,它仍然有效。如果它可以帮助我重新创建虚拟数据..但我怀疑我的代码中有一些简单的东西实际上是在触发错误。
答案 0 :(得分: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表格可公开查看。