使用脚本和网络应用将数据从Google表格的一张复制到另一张

时间:2019-01-22 11:38:32

标签: google-apps-script google-sheets

这是我的第一个脚本经验。我必须制作两种类型的电子表格。一个是给卖方的,另一个是给经理的。带有脚本按钮的卖方工作表中的数据将导入到经理工作表中。我需要使用网络应用程序,因为卖家看不到经理的电子表格。

这是我损坏的代码。卖方脚本部分:

var spreadsheet = SpreadsheetApp.getActive();
var TEST = spreadsheet.getRange("B4").getValue();
var TWO = spreadsheet.getRange("B5").getValue();
var THREE = spreadsheet.getRange("B6").getValue();
var FOUR = spreadsheet.getRange("B7").getValue();
var FIVE = spreadsheet.getRange("B8").getValue(); 

function myFunction() {
  var data = "[new Date(), TEST, TWO, FIVE, FOUR, THREE ];"
  UrlFetchApp.fetch('https://script.google.com/a/***/exec', {payload: data}); 
};

和网络应用程序:

var SHEET_ID = '***';

function doPost(e){
  SpreadsheetApp.openById(SHEET_ID).getSheets()[0].appendRow(e.postData);
}

你能告诉我,这是怎么回事?

1 个答案:

答案 0 :(得分:0)

恐怕代码有些错误。下面的示例工作正常。但是它使用的模型是卖方的(源)电子表格将数据推送到经理的(目的地)电子表格(即已发布的Web应用程序)。

您当然可以使用拉模型执行此操作,其中Web应用程序位于源电子表格中,数据被拉入目标表中。哪种方法最好取决于所有因素,例如将要有多少个电子表格,它们多久更改一次以及您的总体安全模型等。


Button handling code in the source / sending spreadsheet.

function called_by_button(data_to_be_sent){
          // Make some test data.
          var data = {
            'date': new Date(),
            'first': 'data1',
            'second': 'data2'
          };

          var options = {
            'method' : 'post',
            'payload' : data,
            muteHttpExceptions: true
          };
          // This is probably the best way to use UrlFetchApp() and handle errors.

      var url = 'https://script.google.com/macros/s/your-url-here/exec';

      try {
        var response = UrlFetchApp.fetch(url, options); // Post the data (make the HTTP Request)
            var responseCode = response.getResponseCode();
            if (responseCode === 200) { // 200 = SUCCESS
              Logger.log("url_fetch() response code %s ", responseCode);
              return response; 
            } else {
              Logger.log(Utilities.formatString("url_fetch() Request failed for: %s, Expected 200, got %d",url,responseCode ));
              return false; 
              // 
            }
          }// end Try
          catch (err) {
             Logger.log(Utilities.formatString("url_fetch() Request failed (underlying network error). %s, response code: %s",err, responseCode));
             return false;
          } 
   }

doPost() published as a web app from the destination spreadsheet

这将挑选出发送的值并在每一行中记录一个。请注意,由于目标应用程序已绑定到目标电子表格,因此无需使用openById()查找和打开它。如果您将此脚本制作为独立脚本,则必须这样做。

function doPost(e){
  var ss = SpreadsheetApp.getActive();
  var ws = ss.getActiveSheet();
  ws.appendRow([e.parameter.date]);
  ws.appendRow([e.parameter.first]);
  ws.appendRow([e.parameter.second]);
}