Google Script每30分钟导入CSV文件的问题求助
解决方案
以下是修改后的完整脚本,已修复时间匹配问题并添加了CSV创建时间和导入时间的写入功能:
function checkFiles_DATACSV() { // 获取表格和工作表 var id = 'xxx'; // 你的Spreadsheet ID var ss = SpreadsheetApp.openById(id); var sh = ss.getSheetByName('Import_DATACSV'); var folderId = 'xxx'; // CSV文件所在的Drive文件夹ID // 获取文件夹及其中的CSV文件 var folder = DriveApp.getFolderById(folderId); var files = folder.getFilesByType('text/csv'); // 获取当前时间,计算所在的30分钟区间 var now = new Date(); var currentHour = now.getHours(); var currentMinute = now.getMinutes(); // 确定当前属于哪个30分钟段:0-29分属于上半段,30-59分属于下半段 var isFirstHalf = currentMinute < 30; // 计算当前区间的起始时间 var intervalStart = new Date(now); if (isFirstHalf) { intervalStart.setMinutes(0); } else { intervalStart.setMinutes(30); } intervalStart.setSeconds(0); intervalStart.setMilliseconds(0); // 计算当前区间的结束时间(下一个30分钟点) var intervalEnd = new Date(intervalStart); intervalEnd.setMinutes(intervalEnd.getMinutes() + 30); // 用于存储找到的最新CSV数据 var targetData = null; var targetCreatedDate = null; // 遍历所有CSV文件,找到当前30分钟区间内创建的文件 while(files.hasNext()) { var file = files.next(); var created = file.getDateCreated(); // 判断文件创建时间是否在当前30分钟区间内 if (created >= intervalStart && created < intervalEnd) { // 读取文件内容 var data = file.getBlob().getDataAsString(); if(data!=='') { // 存储当前文件的数据和创建时间(如果有多个,会保留最后遍历到的,可根据需求调整为最新的) targetData = data; targetCreatedDate = created; } } } // 如果找到符合条件的CSV文件,执行导入 if (targetData && targetCreatedDate) { // 格式化导入时间 var importTime = Utilities.formatDate(new Date(), "GMT", "dd/MM/yyyy, HH:mm"); // 格式化CSV创建时间 var formattedCreatedDate = Utilities.formatDate(targetCreatedDate, "GMT", "dd/MM/yyyy, HH:mm"); // 清空工作表内容 sh.clearContents(); // 解析CSV数据 var arr = targetData.split('\r\n'); if(arr.length===1) { arr = targetData.split('\n'); } // 处理每一行数据,追加创建时间和导入时间 var rows = []; arr.forEach(function(el){ if (el.trim() !== '') { // 跳过空行 var row = el.split(';'); // 在行末尾添加CSV创建时间和导入时间 row.push(formattedCreatedDate); row.push(importTime); rows.push(row); } }); // 一次性写入所有数据,提升效率 if (rows.length > 0) { sh.getRange(1, 1, rows.length, rows[0].length).setValues(rows); } } }
关键修改说明
时间匹配逻辑修复:
原脚本将文件创建时间的分钟清零,导致只能匹配整点生成的文件。修改后,我们根据当前时间判断属于「0-29分」还是「30-59分」区间,然后筛选出该区间内创建的CSV文件,确保每30分钟执行时能匹配对应时间段生成的文件。添加CSV创建时间和导入时间:
在解析每一行CSV数据后,将格式化后的CSV创建时间和脚本导入时间追加到行末尾,然后一次性写入表格(用setValues代替多次appendRow,大幅提升导入效率)。优化文件遍历逻辑:
遍历文件时只保留当前30分钟区间内的有效文件数据,避免重复处理无关文件;同时跳过空行,防止导入无效数据。
内容的提问来源于stack exchange,提问作者Petrus
相关产品推荐
相关产品推荐

