求助:使用Google Apps Script提取电子表格多工作表数据时出现错误
帮你修正Google Apps Script提取多工作表数据的问题
嘿,我瞅了下你写的代码,有几个明显的小问题导致运行出错,咱们一个个来改:
先说说代码里的核心问题:
getData函数没返回值:你在函数里处理了数据,但最后没把结果return出去,调用它的时候自然拿不到数据- 调用
getData时传参错误:getData(console.log(sheetsN[s]))这行里,console.log只会打印内容,返回的是undefined,等于你给getData传了个无效的工作表名称 dataAll没初始化也没正确收集数据:你直接用dataAll但没先定义它,而且也没把每个工作表的数据存进去- 转义引号要改成正常引号:代码里的
"A1"是HTML转义后的格式,要换成普通的双引号"A1"
修正后的完整代码
function getData(s) { const ss = SpreadsheetApp.getActiveSpreadsheet(); const ws = ss.getSheetByName(s); // 处理工作表不存在的情况,避免报错中断 if (!ws) { console.log(`工作表 ${s} 不存在`); return null; } const data = ws.getRange("A1").getDataRegion().getValues(); const headers = data.shift(); const jsonArray = data.map(r => { let obj = {}; headers.forEach((h, i) => { obj[h] = r[i]; }); return obj; }); // 返回当前工作表的名称和对应数据,方便后续统一收集 return { name: s, data: jsonArray }; } function getDo() { var sheetsN = ['check1', 'check2', 'check3', 'check4', 'check5']; // 初始化dataAll为数组,用来存所有有效工作表的数据 const dataAll = []; for (var s = 0; s < sheetsN.length; s++) { const sheetData = getData(sheetsN[s]); // 如果工作表存在,就把数据加入数组 if (sheetData) { dataAll.push(sheetData); } } // 返回结构化的JSON结果 return ContentService.createTextOutput(JSON.stringify({ sheets: dataAll })) .setMimeType(ContentService.MimeType.JSON); }
改动说明:
- 给
getData加了返回值,同时返回工作表名称和对应数据,让后续数据整理更清晰 - 增加了工作表不存在的判断逻辑,避免因为某个表找不到导致整个脚本崩溃
- 修正了
getData的传参方式,直接传入工作表名称sheetsN[s] - 初始化
dataAll为数组,循环时把每个有效的工作表数据push进去 - 把转义引号换成了正常的双引号,确保代码能被正确解析
- 最终返回的JSON结构更合理,包含所有工作表的名称和对应结构化数据
这样你运行getDo函数后,就能拿到所有指定工作表的结构化JSON数据啦~
内容的提问来源于stack exchange,提问作者ReinholdN
相关产品推荐
相关产品推荐

