1

我已经阅读了数百个论坛问题,但找不到解决方案。

我想将我的表单数据(AfterSave)发送到 Google 表格

我在 Google Sheet 上创建了一个类似这样的 Web 应用程序

function doGet(e){
  return handleResponse(e);
}
        var SHEET_NAME = "Sheet1";

var SCRIPT_PROP = PropertiesService.getScriptProperties(); 

function doPost(e){
  return handleResponse(e);
}

function handleResponse(e) {
  var lock = LockService.getPublicLock();
  lock.waitLock(30000);  

  try {
    var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("1-L-rFuTM4oWbzcoLCfAoTGvvwC0iSiCdKtZRvl3RdRI"));
    var sheet = doc.getSheetByName(SHEET_NAME);

    var headRow = e.parameter.header_row || 1;
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow()+1; // get next row
    var row = []; 

    for (i in headers){
      if (headers[i] == "Timestamp"){ 
        row.push(new Date());
      } else { 
        row.push(e.parameter[headers[i]]);
      }
    }

    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);

    return ContentService
          .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
          .setMimeType(ContentService.MimeType.JSON);
  } catch(e){

    return ContentService
          .createTextOutput(JSON.stringify({"result":"error", "error": e}))
          .setMimeType(ContentService.MimeType.JSON);
  } finally { 
    lock.releaseLock();
  }
}

function setup() {
    var doc = SpreadsheetApp.openById('1-L-rFuTM4oWbzcoLCfAoTGvvwC0iSiCdKtZRvl3RdRI');
    SCRIPT_PROP.setProperty("key", doc.getId());
}

然后我继续在我的 Wix 站点上创建了一个后端 .JSW,看起来像这样

//sendSheets.jsw

import {fetch} from 'wix-fetch';

export function sendToSheets(data) {    
    fetch("https://script.google.com/macros/s/AKfycbykq05IP_ABzQfLa9ura_pISv-zwUHZdeGb2F9681ffyzubXi9I/exec", {
        method: 'post',
        body: data
    });
}

最后在我的页面代码上看起来像这样

import {sendToSheets} from 'backend/sendSheets.jsw'; 

$w.onReady(function () {
  $w("#dataset1").onAfterSave(sendToSheets);
});

export function sendFormData() {

    var data = {
        "input1":$w("#input1").value,
        "input2":$w("#input2").value,
        "dropdown1":$w("#dropdown1").value,
        "dropdown2":$w("#dropdown2").value
    };

    sendToSheets(data);

}

最后,我在 Google 脚本编辑器上创建的脚本显示我的脚本总共运行了 7 次,这是我提交表单的确切次数,但我的工作表上没有发布任何内容

我来自营销背景,我只知道一点编码(我正在努力学习),但我真的不明白该怎么做。

4

1 回答 1

0

您现在可以通过为 googleapi 添加一个 npm 包来做到这一点,有一个很好的示例模板演示了表单提交场景。该过程涉及两个步骤: 1) 配置凭据和 Auth2 令牌并将它们保存到存储中。2) 使用凭据在每次提交表单时调用 google api。

最后,表单提交将如下所示:

```

function insertRow(values, authClient, ssID) {
        var sheets = google.sheets('v4');
        const request = {
            spreadsheetId: ssID,  // The ID of the spreadsheet to update.
            valueInputOption: 'RAW',  // How the input data should be interpreted.
            insertDataOption: 'INSERT_ROWS',  // How the input data should be inserted.
            range: 'A1:A2', // The A1 notation of a range to search
                            // for a logical table of data. Values will be
                            // appended after the last row of the table.
            resource: {
                "values": [
                    values
                ]
            },
            auth: authClient,
        };
        try {
            return sheets.spreadsheets.values.append(request, function (err, response) {
                if (err) {
                    console.log("error in append:" + err);
                    return;
                }
                return "ok";
            });
        } catch (err) {
            console.log("error in append values" + err);
        `enter code here`}
    }

```

您可以在此处查看完整的示例模板: https ://www.wix.com/code/home/forum/wix-tips-and-updates/example-google-sheets-npm

于 2018-11-25T08:12:14.263 回答