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

Google Apps Script中appendRow如何解析表单复选框数组响应?

解决Google表单复选框响应写入Sheet显示乱码的问题

问题原因

当表单包含复选框项时,itemResponse.getResponse()返回的是数组类型结果(比如选中周一、周三时,返回["Monday", "Wednesday"])。直接将数组传入appendRow()时,Google Sheets会把数组当作对象输出其内存地址标识,也就是你看到的[Ljava.lang.Object;@40637acb。

解决方法

核心是把数组类型的响应转换为逗号分隔的字符串,修改代码中处理表单响应的逻辑即可:

修改后的完整代码

function onFormSubmit(event) {
  const record_array = [];
  const formId = '你的表单ID';
  const form = FormApp.openById(formId);
  const formResponses = form.getResponses();
  const latestResponse = formResponses[formResponses.length - 1];
  const itemResponses = latestResponse.getItemResponses();

  for (let j = 0; j < itemResponses.length; j++) {
    const itemResponse = itemResponses[j];
    let answer = itemResponse.getResponse();
    // 关键:判断是否为数组,是则转为逗号分隔的字符串
    if (Array.isArray(answer)) {
      answer = answer.join(', ');
    }
    record_array.push(answer);
  }
  AddRecord(record_array[0], record_array[1], record_array[2], record_array[3]);
}

function AddRecord(first_name, last_name, color, test) {
  const sheetUrl = '你的表格URL';
  const ss = SpreadsheetApp.openByUrl(sheetUrl);
  const dataSheet = ss.getSheetByName("Sheet1");
  dataSheet.appendRow([first_name, last_name, color, test, new Date()]);
}

更高效的优化版本(利用event参数)

onFormSubmit触发器本身会传入event对象,直接从event中获取当前提交的响应,无需遍历所有历史响应,效率更高:

function onFormSubmit(event) {
  const record_array = [];
  const itemResponses = event.response.getItemResponses();

  for (let j = 0; j < itemResponses.length; j++) {
    const itemResponse = itemResponses[j];
    let answer = itemResponse.getResponse();
    if (Array.isArray(answer)) {
      answer = answer.join(', ');
    }
    record_array.push(answer);
  }
  AddRecord(record_array[0], record_array[1], record_array[2], record_array[3]);
}

function AddRecord(first_name, last_name, color, test) {
  const sheetUrl = '你的表格URL';
  const ss = SpreadsheetApp.openByUrl(sheetUrl);
  const dataSheet = ss.getSheetByName("Sheet1");
  dataSheet.appendRow([first_name, last_name, color, test, new Date()]);
}

关键代码说明

  • Array.isArray(answer):判断当前响应是否为数组(复选框项专属)
  • answer.join(', '):将数组元素用逗号加空格拼接成字符串,比如["Monday", "Wednesday"]会转为"Monday, Wednesday"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:42:40