首页 > 解决方案 > 根据 ID 值更新 Google Sheet Row(我使用 Javascript 将有效负载插入到我的工作表中)

问题描述

我想用基于 ID 的新提交数据更新整行。我的页面上有一个表单,它使用 Javascript 将数据发送到我的工作表。

这是基于输入 ID 发送的简单脚本:

<script>
            const scriptURL = "https://script.google.com/macros/s/AKfycxxxxxx/exec";
            const form = document.forms['google-sheet']
          
            form.addEventListener('submit', e => {
              e.preventDefault()
              fetch(scriptURL, { method: 'POST', body: new FormData(form)})
                .then(response => document.getElementById("conf").submit() )
                .catch(error => console.error('Error!', error.message))
            })
</script>

这是我上网的应用程序脚本:

var sheetName = 'Sheet1' 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, sheet.getLastColumn()).getValues()[0]
        var nextRow = sheet.getLastRow() + 1

        var newRow = headers.map(function(header) {
          return header === 'timestamp' ? new Date() : e.parameter[header]
        })
        
        
            
            sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
            return ContentService
            .createTextOutput(e.parameter.callback + "(" + JSON.stringify({ 'result': 'success', 'row': newRow })+ ")")
            .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()
      }
    }

我能够在工作表上发布数据,但如果找到 ID,我想更新整行,如果找不到 ID,则插入:

在此处输入图像描述

标签: google-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • 提交表单时,您想id从“Sheet1”的“A”列中进行搜索。
  • 当提交的 ID 存在于“Sheet1”的“A”列中时,您希望使用提交的值更新同一行。
  • 当“Sheet1”的“A”列中不存在提交的 ID 时,您要附加提交的值。

在这种情况下,如何进行以下修改?

从:

var newRow = headers.map(function(header) {
  return header === 'timestamp' ? new Date() : e.parameter[header]
})

至:

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

笔记:

参考:


推荐阅读