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

在Google Apps Script的if-else中无法正常运行do-while循环的问题

问题解决:Google Apps Script 导入最新CSV并追加数据

原代码核心问题

  • 获取最新文件逻辑错误:仅取文件夹中第一个文件,未按修改时间排序,无法定位最新CSV。
  • 循环判断逻辑混乱:用表格行数与CSV行数的大小关系决定覆盖/追加,完全不符合需求;else块重复解析CSV,循环条件错误易引发死循环。
  • 逐行写入效率极低:每次循环写入一行数据,大幅拖慢执行速度。
  • 变量与函数嵌套冗余:files变量重复赋值,多层嵌套函数降低代码可读性。

修正后的完整代码

function importLatestCsv() {
  // 获取目标文件夹
  const folderIterator = DriveApp.getFoldersByName("Printer CSVs");
  if (!folderIterator.hasNext()) {
    console.log("未找到名为'Printer CSVs'的文件夹");
    return;
  }
  const folder = folderIterator.next();

  // 获取文件夹中所有CSV文件,并按修改时间降序排序,取最新文件
  const csvFiles = folder.getFilesByType(MimeType.CSV);
  const fileList = [];
  while (csvFiles.hasNext()) {
    const file = csvFiles.next();
    fileList.push({file: file, lastModified: file.getLastModified()});
  }
  if (fileList.length === 0) {
    console.log("文件夹中无CSV文件");
    return;
  }
  // 按修改时间从新到旧排序,取第一个
  fileList.sort((a, b) => b.lastModified - a.lastModified);
  const latestFile = fileList[0].file;

  // 解析CSV数据
  const csvContent = latestFile.getBlob().getDataAsString();
  let csvData = Utilities.parseCsv(csvContent);
  if (csvData.length === 0) {
    console.log("CSV文件为空");
    return;
  }

  // 定位目标表格
  const ss = SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName('Sheet1');
  const lastWorkingRow = sheet.getLastRow();

  // 处理表头:如果表格已有数据,移除CSV的第一行
  if (lastWorkingRow > 0) {
    csvData.shift(); // 删除表头行
    if (csvData.length === 0) {
      console.log("CSV文件仅含表头,无数据可追加");
      return;
    }
  }

  // 批量写入/追加数据
  const targetRange = sheet.getRange(lastWorkingRow + 1, 1, csvData.length, csvData[0].length);
  targetRange.setValues(csvData);
  console.log(`成功导入${csvData.length}行数据`);
}

关键逻辑说明

  • 获取最新文件:遍历文件夹中所有CSV文件,记录每个文件的修改时间,排序后取最新的一个,确保每次处理的是最新上传的文件。
  • 表头处理:通过判断表格已有行数(lastWorkingRow > 0)决定是否移除CSV表头,满足"后续上传文件移除表头"的需求。
  • 批量写入:直接计算目标写入范围,用setValues一次性写入所有数据,避免逐行写入的低效问题,同时确保新数据追加到现有数据下方。

内容的提问来源于stack exchange,提问作者Divyesh Valand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:55:35