Google Apps Script从Google Drive导入CSV至Google Sheets功能正误咨询
现有代码存在的问题
- 文件夹ID取值单元格不符合需求:你需要取「Dashboard」工作表B2的值,但代码中取的是B1单元格
- 文件搜索范围未限制:
DriveApp.getFilesByName()是搜索你整个Google Drive的文件,没有限定在你指定的目标文件夹内,重名场景下会拿到错误的文件 - 导入目标工作表错误:需求要求导入到名为INPUT的工作表,代码中用
getActiveSheet()会将内容导入到当前打开的任意工作表,不符合要求 - 缺少错误处理:直接调用
.next()如果找不到对应文件名的文件,会直接抛出运行异常;同时代码末尾缺少函数闭合的} - 已定义的folder变量未使用:代码中获取了指定ID的文件夹对象,但后续完全没有用到该变量
修正后的代码
function importCSV() { // 获取当前表格文件 var ss = SpreadsheetApp.getActiveSpreadsheet(); // 从Dashboard工作表B2取目标文件夹ID var folderId = ss.getSheetByName("Dashboard").getRange("B2").getValue(); var targetFolder = DriveApp.getFolderById(folderId); // 从Dashboard工作表A2取目标CSV文件名 var csvFileName = ss.getSheetByName("Dashboard").getRange("A2").getValue(); // 仅在指定文件夹内搜索对应名称的文件 var fileSearchRes = targetFolder.getFilesByName(csvFileName); // 容错:判断是否找到对应文件 if (!fileSearchRes.hasNext()) { SpreadsheetApp.getUi().alert("指定文件夹内未找到对应名称的CSV文件"); return; } var csvFile = fileSearchRes.next(); // 解析CSV内容 var csvData = Utilities.parseCsv(csvFile.getBlob().getDataAsString()); // 获取INPUT目标工作表 var targetSheet = ss.getSheetByName("INPUT"); // 清空目标工作表原有内容(可选,按需保留/删除) targetSheet.clearContents(); // 写入CSV内容 targetSheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData); }
额外说明
- 如果你的CSV文件存在特殊分隔符、编码异常的情况,可以给
parseCsv方法传入第二个参数指定分隔符,比如Utilities.parseCsv(content, '\t')对应制表符分隔的文件 - 代码里加了找不到文件的弹窗提示,你也可以根据自己的需求修改为其他错误处理逻辑
内容的提问来源于stack exchange,提问作者Gubernaculum
相关产品推荐
相关产品推荐

