You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheet Apps Script报错:TypeError: 无法读取undefined的'Plate'属性

解决Google Apps Script TypeError: Cannot read properties of undefined (reading 'Plate')问题

问题分析

报错TypeError: Cannot read properties of undefined (reading 'Plate')出现在ACar.gs第14行,说明代码尝试读取formData.Plate时,formData变量为undefined。结合代码场景,主要触发原因是:

  • 直接在脚本编辑器中手动运行addDataToCar函数,此时未传入formData参数,导致参数为空;
  • 同时代码存在隐性问题:收集好的data数组未被使用,最终写入工作表的是空数组newRow,会导致提交后无数据写入。

修复步骤

  1. 仅通过表单提交触发addDataToCar函数,禁止直接在脚本编辑器中运行该函数;
  2. 修正数据写入逻辑,将收集好的data数组传入appendRow方法;
  3. 添加参数校验和错误处理,避免因参数缺失或异常导致的报错,同时提升用户反馈体验。

修改后的完整代码

Google Apps Script(ACar.gs)

function openForm() {
  var html = HtmlService.createHtmlOutputFromFile('AddCar')
      .setWidth(400)
      .setHeight(600);
  SpreadsheetApp.getUi()
      .showModalDialog(html, 'Add Car');
}

function addDataToCar(formData) {
  // 参数校验:避免formData为空时报错
  if (!formData) {
    SpreadsheetApp.getUi().alert('数据传递异常,请通过表单提交数据');
    return;
  }
  
  // 校验工作表是否存在
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Car');
  if (!sheet) {
    SpreadsheetApp.getUi().alert('未找到名为"Car"的工作表');
    return;
  }
  
  var data = [];
  data.push(formData.Plate); 
  data.push(formData.Province);
  data.push(formData.Type);
  data.push(formData.Brand);
  data.push(formData.Model);
  data.push(formData.License_date);
  data.push(formData.Chassise);
  data.push(formData.Engine);
  data.push(formData.HorsePower);
  data.push(formData.Size);
  data.push(formData.Owner);
  data.push(formData.be_under);
  data.push(formData.Extra);
  
  // 使用收集好的data数组写入工作表
  sheet.appendRow(data);
  
  // 提交成功提示
  SpreadsheetApp.getUi().alert('数据添加成功');
}

HTML代码(AddCar.html)

<!DOCTYPE html>
<html>
<head>
    <base target="_top">
</head>
<body>
    <form id="carForm">
        <label for="Plate">ทะเบียนรถ:</label>
        <input type="text" id="Plate" name="Plate"><br><br>

        <label for="Province">จังหวัด:</label>
        <input type="text" id="Province" name="Province"><br><br>

        <label for="Type">ประเภทรถ:</label>
        <input type="text" id="Type" name="Type"><br><br>

        <label for="Brand">ยี่ห้อ:</label>
        <input type="text" id="Brand" name="Brand"><br><br>

        <label for="Model">รุ่น:</label>
        <input type="text" id="Model" name="Model"><br><br>

        <label for="License_date">วันจดทะเบียน:</label>
        <input type="date" id="License_date" name="License_date"><br><br>

        <label for="Chassise">เลขคัสซี:</label>
        <input type="text" id="Chassise" name="Chassise"><br><br>

        <label for="Engine">เลขเครื่อง:</label>
        <input type="text" id="Engine" name="Engine"><br><br>

        <label for="HorsePower">แรงม้า:</label>
        <input type="text" id="HorsePower" name="HorsePower"><br><br>

        <label for="Size">ขนาด:</label>
        <input type="text" id="Size" name="Size"><br><br>

        <label for="Owner">เจ้าของ:</label>
        <input type="text" id="Owner" name="Owner"><br><br>

        <label for="be_under">ผู้ดูแล:</label>
        <input type="text" id="be_under" name="be_under"><br><br>

        <label for="Extra">หมายเหตุเพิ่มเติม:</label>
        <textarea id="Extra" name="Extra" rows="3" cols="50"></textarea><br><br>

        <input type="button" value="เพิ่มข้อมูล" onclick="submitCData()">
    </form>

    <script>
        function submitCData() {
            var formData = {
                Plate: document.getElementById('Plate').value,
                Province: document.getElementById('Province').value,
                Type: document.getElementById('Type').value,
                Brand: document.getElementById('Brand').value,
                Model: document.getElementById('Model').value,
                License_date: document.getElementById('License_date').value,
                Chassise: document.getElementById('Chassise').value,
                Engine: document.getElementById('Engine').value,
                HorsePower: document.getElementById('HorsePower').value,
                Size: document.getElementById('Size').value,
                Owner: document.getElementById('Owner').value,
                be_under: document.getElementById('be_under').value,
                Extra: document.getElementById('Extra').value
            };

            console.log(formData);

            // 添加失败处理逻辑
            google.script.run
                .withFailureHandler(function(error) {
                    alert('提交失败: ' + error.message);
                })
                .addDataToCar(formData);

            google.script.host.close();
        }
    </script>
</body>
</html>

使用说明

  1. 确保Google表格中存在名为Car的工作表,且表头数量与表单字段数量匹配;
  2. 在脚本编辑器中运行openForm函数打开弹窗表单,禁止直接运行addDataToCar;
  3. 填写表单后点击提交按钮,数据将自动写入Car工作表,同时会收到操作结果提示。

内容的提问来源于stack exchange,提问作者JIWJIWWANTSHELP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:07:01