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

Excel Office Script 处理Jotform返回二维数组批量写入Excel问题求助

问题根因
  • 现有逻辑将所有提交的全部答案统一存入全局的subRows数组,没有和单个提交行做绑定,转置后所有答案会合并为单行多列的结构,自然全部写入第一行
  • 拆分rows和subRows两个数组分别写入的逻辑没必要,反而增加了行列匹配的复杂度
最优解决方案

直接构造符合Excel写入规则的完整二维数组,一次调用setValues完成写入,不需要额外的转置操作,性能最高。你可以根据实际展示需求选择以下两种场景的代码:


场景1:每个提交占一行,后接所有答案(符合你原有rows写入正常的预期)

每行结构:提交ID | 提交时间 | 答案1 | 答案2 | ... | 答案N

// 直接构造最终要写入的完整二维数组
let finalRows: (string | boolean | number)[][] = [];

for (const [key, value] of Object.entries(result)) {
    // 初始化当前行:前两列为提交ID、提交时间
    let currentRow = [value["id"], value["created_at"]];
    // 遍历当前提交的所有答案,依次追加到当前行末尾
    for (const [subKey, subValue] of Object.entries(value["answers"])) {
        if (subValue.hasOwnProperty("answer")) {
            currentRow.push(checkAnswer(subValue["answer"]));
        }
    }
    finalRows.push(currentRow);
}

// 优化答案处理函数,兼容字符串/数组两种入参情况
function checkAnswer(answer: string | string[]) {
    if (Array.isArray(answer)) {
        return answer.length > 1 ? answer.join("||") : answer[0];
    }
    return answer;
}

// 一次写入所有数据,从A5开始
const targetRange = workSheet.getRange('A5').getResizedRange(finalRows.length - 1, finalRows[0].length - 1);
targetRange.setValues(finalRows);

场景2:每条答案单独占一行(符合你描述的“每条答案对应Excel的一行”预期)

每行结构:提交ID | 提交时间 | 单条答案内容

let finalRows: (string | boolean | number)[][] = [];

for (const [key, value] of Object.entries(result)) {
    const submitId = value["id"];
    const submitTime = value["created_at"];
    // 每个答案单独构造一行
    for (const [subKey, subValue] of Object.entries(value["answers"])) {
        if (subValue.hasOwnProperty("answer")) {
            const answer = checkAnswer(subValue["answer"]);
            finalRows.push([submitId, submitTime, answer]);
        }
    }
}

function checkAnswer(answer: string | string[]) {
    if (Array.isArray(answer)) {
        return answer.length > 1 ? answer.join("||") : answer[0];
    }
    return answer;
}

// 一次写入所有数据
const targetRange = workSheet.getRange('A5').getResizedRange(finalRows.length - 1, finalRows[0].length - 1);
targetRange.setValues(finalRows);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:27:05