Google Apps Script导入API CSV时getRange与setValues列数不匹配问题求助
修复方案
核心问题
- 手动通过
split("\n")、split(",")拆分CSV的逻辑不兼容标准CSV格式:当CSV字段内部自带逗号、换行、双引号时,拆分结果会出现行长度不一致,直接触发setValues的列数不匹配报错 - 代码中
data.replace("\"","")仅能替换第一个双引号,无法处理所有字段包裹符号,进一步加剧拆分错误 - 你注释掉了Google Apps Script内置的
Utilities.parseCsv()原生方法,该方法已经完整兼容CSV的各种标准规则,是最稳定的解析方案
可直接运行的修复代码
function importCSVFromAPI() { var response = UrlFetchApp.fetch("https://www.gw2spidy.com/api/v0.9/csv/all-items/all"); var csvContent = response.getBlob().getDataAsString(); // 用原生方法解析CSV,自动处理字段内逗号、引号、换行等特殊情况 var data = Utilities.parseCsv(csvContent, ","); var dest = SpreadsheetApp.getActiveSheet(); dest.clear(); // 兜底逻辑:统一所有行的列数和表头一致,避免极端异常数据导致报错 const headerColCnt = data[0].length; data = data.map(row => { // 列数多的截断 if (row.length > headerColCnt) return row.slice(0, headerColCnt); // 列数少的补空值 if (row.length < headerColCnt) return [...row, ...new Array(headerColCnt - row.length).fill('')]; return row; }) dest.getRange(1, 1, data.length, headerColCnt).setValues(data); }
验证说明
直接运行上述代码即可正常写入,原生CSV解析方法会自动处理所有标准格式的特殊字符,兜底逻辑会强制对齐所有行的列数,完全避免列数不匹配的报错。
内容的提问来源于stack exchange,提问作者Coda Raafat
相关产品推荐
相关产品推荐

