You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:24:28