根据表单输入数据插入到特定的工作表名称

时间:2021-06-16 01:02:34

标签: google-apps-script google-sheets

我想根据表单输入值“svdate”将我的数据插入到特定的工作表名称中:

<form method="get" action="submission-success.php" name="google-sheet">

        <div class="form-group">Customer Name:
            <input type="text" name="Customer" class="form-control" value="Michael Wilson" required readonly />
        </div>
        <div class="form-group">Total:
            <input type="text" name="Amount" class="form-control" value="$120.00" required readonly />
        </div>
        <div class="form-group">Cleaner Name:
            <input type="text" name="Cleaners" class="form-control" value="Dee" required readonly />
        </div>
        

        <div>
            <input type="text" name="svdate" class="form-control" value="06/17/2021" required readonly hidden />
        </div>

     <! –– some other fields here -->

        <div class="form-group">
            <button type="" id="qid" class="button" onclick="this.classList.toggle('button--loading')">
                <span class="button__text">Submit</span>
            </button> 
        </div>
</form>

以下是我们所有基于日期的工作表名称:

enter image description here

由于我们表单上的 svdate 是 06/17/2021,因此表单数据应插入到 6/17 sheetname。我该怎么做?

这是我在 Code.gs 中插入数据的脚本,但我不知道如何将值分配给我的 sheetName 变量:

var sheetName = // I want to assign the "svdate" value here...

    var scriptProp = PropertiesService.getScriptProperties()

    function intialSetup () {
      var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
      scriptProp.setProperty('key', activeSpreadsheet.getId())
    }

    function doPost (e) {
      var lock = LockService.getScriptLock()
      lock.tryLock(10000)

      try {
        var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
        var sheet = doc.getSheetByName(sheetName)

        var headers = sheet.getRange(1, 1, 1, 10).getValues()[0]
        var nextRow = sheet.getLastRow() + 1

        var newRow = headers.map(function(header) {
          return header === 'timestamp' ? new Date() : e.parameter[header]
        })
        
        var find = sheet.getRange(1, 1, sheet.getLastRow()).createTextFinder(newRow[0]).matchEntireCell(true).findNext(); // Added
        sheet.getRange(find ? find.getRow() : nextRow, 1, 1, newRow.length).setValues([newRow]); // Added
        
        return ContentService
        .createTextOutput(e.parameter.callback + "(" + JSON.stringify({ 'result': 'success', 'row': nextRow })+ ")")
        .setMimeType(ContentService.MimeType.JAVASCRIPT);
      }

      catch (e) {
        return ContentService
          .createTextOutput(e.parameter.callback + "(" + JSON.stringify({ 'result': 'error', 'error': e })+ ")")
          .setMimeType(ContentService.MimeType.JAVASCRIPT)
      }

      finally {
        lock.releaseLock()
      }
    }

1 个答案:

答案 0 :(得分:2)

我认为在您的情况下,需要从 6/17 检索 06/17/2021。为此,下面的修改如何?

修改后的脚本:

在这种情况下,请按如下方式修改 doPost

来自:

try {
  var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
  var sheet = doc.getSheetByName(sheetName)

致:

try {
  sheetName = e.parameter.svdate.split("/").splice(0, 2).map(e => e.replace(/^0/, "")).join("/");
  var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'));
  var sheet = doc.getSheetByName(sheetName);
  if (!sheet) throw new Error(`${sheetName} was not found.`);
  • 在此修改后的脚本中,当在电子表格中找不到 sheetName 的工作表名称时,会返回错误 ${sheetName} was not found.

注意:

  • 当您修改 Google Apps 脚本时,请将部署修改为新版本。这样,修改后的脚本就会反映到 Web Apps 中。请注意这一点。
  • 您可以在“Redeploying Web Apps without Changing URL of Web Apps for new IDE”的报告中看到详细信息。
  • 这个答案假设您当前的脚本工作正常。请注意这一点。

参考:

相关问题