求助:将Google Drive最新CSV数据自动导入同目录MASTER-SHEET
问题分析与解决方案
原代码存在的核心问题
- 未筛选最新的CSV文件:仅遍历所有CSV,但未按修改/创建时间排序,无法定位到最新生成的文件
- 未执行数据写入操作:仅完成了CSV解析,没有将数据写入到MASTER-SHEET的工作表中
- 冗余的类型判断:已经通过
getFilesByType('text/csv')筛选CSV文件,无需重复判断Blob的ContentType
修正后的代码
function importLatestCsvToMaster() { // 替换为你的MASTER-SHEET ID和目标工作表名称 const masterSheetId = "{MASTERSHEET_ID}"; const targetSheetName = "Sheet1"; // 请确认你的工作表实际名称,原代码的MASTERSHEET_SHEET1可能有误 // 替换为你的Google Drive文件夹ID const folderId = '{GOOGLE_DRIVE_FOLDER_ID}'; const masterSs = SpreadsheetApp.openById(masterSheetId); const targetSheet = masterSs.getSheetByName(targetSheetName); if (!targetSheet) { throw new Error(`找不到名为${targetSheetName}的工作表`); } const folder = DriveApp.getFolderById(folderId); let latestFile = null; let latestTime = new Date(0); // 初始化为最早时间 // 遍历筛选出最新的、不带.old后缀的CSV文件 const csvFiles = folder.getFilesByType('text/csv'); while (csvFiles.hasNext()) { const file = csvFiles.next(); const fileName = file.getName(); if (!fileName.includes('.old')) { const lastModified = file.getLastUpdated(); if (lastModified > latestTime) { latestTime = lastModified; latestFile = file; } } } if (!latestFile) { throw new Error("文件夹中未找到符合条件的CSV文件"); } // 解析CSV数据 const csvString = latestFile.getBlob().getDataAsString(); const csvData = Utilities.parseCsv(csvString); // 写入数据:清空原有内容后写入新数据(若需追加,可改为从最后一行开始写入) targetSheet.clearContents(); targetSheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData); // 可选:标记已处理文件,避免重复导入 latestFile.setName(latestFile.getName() + '.old'); }
关键改动说明
- 最新文件筛选:通过对比文件的最后修改时间,精准定位到文件夹中最新生成的CSV文件
- 数据写入:使用
setValues()方法将解析后的CSV数据批量写入目标工作表,保证效率 - 错误检查:增加工作表和文件存在性校验,抛出明确错误信息,便于排查问题
- 重复处理防护:可选的文件重命名标记,处理完成后给文件添加
.old后缀,避免后续重复导入 - 变量优化:将工作表名称改为可配置变量,修正原代码中可能存在的Sheet名称错误
内容的提问来源于stack exchange,提问作者James N.
相关产品推荐
相关产品推荐

