Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过Google应用程序脚本将Google工作表数据传递到本地Node.js服务器_Javascript_Node.js_Google Apps Script - Fatal编程技术网

Javascript 通过Google应用程序脚本将Google工作表数据传递到本地Node.js服务器

Javascript 通过Google应用程序脚本将Google工作表数据传递到本地Node.js服务器,javascript,node.js,google-apps-script,Javascript,Node.js,Google Apps Script,我浏览了以下指南:为谷歌应用程序脚本创建一个快速启动目标。在本节结束时,我按照Node.js教程从本地Node.js服务器执行此脚本: 一切都成功了 但是,我用以下代码替换了Google应用程序脚本中的默认代码: 为此: 还有其他人遇到过这个问题吗?我不认为这是谷歌应用程序脚本,因为当我使用默认示例回滚到目标时,它仍然有效。如果有帮助的话,我可以用虚拟数据重新创建..,但我怀疑我的代码中有一些简单的东西实际上触发了错误。好的,我一开始就对任务进行了彻底的思考。Google Sheets对特定格式

我浏览了以下指南:为谷歌应用程序脚本创建一个快速启动目标。在本节结束时,我按照Node.js教程从本地Node.js服务器执行此脚本:

一切都成功了

但是,我用以下代码替换了Google应用程序脚本中的默认代码:

为此:


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

好的,我一开始就对任务进行了彻底的思考。Google Sheets对特定格式有一个
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));
}
var https=require('https');
var path=require('path');
var fs=需要('fs');
var格式='tsv';
var id='id_OF_GOOGLE_SHEET';
https.get('https://docs.google.com/spreadsheets/d/“+id+”/export?格式=“+format+”&id=”+id,函数(resp){
变量体=“”;
响应
.on('data',函数(data){
body+=ab2str(数据);
})
.on('end',function(){
var json=[];
var rows=body.split(/\r\n/i);
对于(变量i=0;i

最值得注意的是这要求您的谷歌表单必须公开查看。

这一问题似乎表明,
openById
openByUrl
因服务器端交互而被撤销。。?谷歌问题证实:如果你仍然想使用谷歌应用程序脚本,那么解决方法似乎是将你的函数绑定到一个
触发器上:
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);

}
The API returned an error:  { [Error: ScriptError]
  code: 401,
  errors: 
   [ { message: 'ScriptError',
       domain: 'global',
       reason: 'unauthorized' } ] }
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));
}