1

何百ものフォーラムの質問を読みましたが、解決策が見つかりません。

フォーム データ (AfterSave) を Google スプレッドシートに送信したい

このようなGoogleシートで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 Script Editor で作成したスクリプトは、スクリプトが合計 7 回実行されたことを示しています。これは、フォームを送信した正確な回数ですが、シートには何も投稿されていません。

私はマーケティングのバックグラウンドを持っており、コーディングについて少ししか知りませんが (学習しようとしています)、何をすべきか本当に理解できません。

4

1 に答える 1