将Drive文件夹多CSV合并至Google Sheets单一工作表时代码报错求助
问题解决:Google Apps Script导入CSV报错处理
报错原因
你遇到的Exception: Cannot convert 'function () { [native code] }1' to int.错误,根源是代码里sheet.getLastRow +1的写法错误:
getLastRow是Google Sheets的方法,必须通过()调用才能返回当前工作表的最后一行行号;- 直接写
sheet.getLastRow会获取到函数本身,和+1拼接后变成无效的字符串值,无法被getRange方法解析为整数行号,从而触发类型转换异常。
修正后的代码
function appendCSV() { const folder = DriveApp.getFolderById("ID_Folder"); const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet_Name"); const files = folder.getFiles(); const csvFiles = []; // 先收集所有CSV文件(可选:如果需要按顺序导入,可在此步骤排序) while (files.hasNext()) { const file = files.next(); if (file.getMimeType() === "text/csv") { csvFiles.push(file); } } // 按文件名排序(可选,根据需求调整排序规则) csvFiles.sort((a, b) => a.getName().localeCompare(b.getName())); // 逐个导入CSV数据 csvFiles.forEach(file => { const csvData = Utilities.parseCsv(file.getBlob().getDataAsString(), ","); // 关键修正:调用getLastRow()方法获取行号 sheet.getRange(sheet.getLastRow() + 1, 1, csvData.length, csvData[0].length).setValues(csvData); }); }
关键修改说明
- 核心修正:将
sheet.getLastRow +1改为sheet.getLastRow() +1,确保获取到有效的最后一行行号; - 可选优化:
- 先收集所有CSV文件再处理,便于添加排序逻辑(Drive的
getFiles()返回的文件顺序不固定,若需要按特定顺序导入,可通过sort方法调整,示例中按文件名排序); - 函数名修正为
appendCSV(原代码中happendCSV是拼写错误,不影响运行但建议规范命名)。
- 先收集所有CSV文件再处理,便于添加排序逻辑(Drive的
内容的提问来源于stack exchange,提问作者Amidaraxar
相关产品推荐
相关产品推荐

