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

需求:用Google Script/ImportRange自动导入文件夹内最新修改的Google Sheet数据

自动导入Google Drive文件夹中最新修改的Sheet数据到日报

解决方案思路

由于IMPORTRANGE仅支持固定文件ID,无法动态获取最新文件路径,因此通过Google Apps Script实现以下核心逻辑:

  1. 定位指定Google Drive文件夹
  2. 筛选文件夹内所有Google Sheet文件,按修改时间排序并获取最新的一个
  3. 要么直接将最新Sheet的数据复制到日报,要么动态生成IMPORTRANGE公式插入指定单元格

方法1:直接复制数据到日报(推荐,无需手动授权跨文件访问)

此方法会将最新Sheet的所有数据直接写入日报,数据为静态副本,适合不需要实时同步的场景。

function importLatestSheetData() {
  // 替换为你的固定Google Drive文件夹ID
  const folderId = "YOUR_FOLDER_ID";
  // 替换为你的日报Sheet名称和数据写入的起始单元格
  const dailyReportSheetName = "日报";
  const targetStartCell = "A1";

  // 获取目标文件夹
  const folder = DriveApp.getFolderById(folderId);
  // 获取文件夹内所有Google Sheet类型文件
  const files = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  
  let latestFile = null;
  let latestModifiedTime = new Date(0); // 初始化为最早时间戳

  // 遍历文件,筛选最后修改的文件
  while (files.hasNext()) {
    const file = files.next();
    const modifiedTime = file.getLastUpdated();
    if (modifiedTime > latestModifiedTime) {
      latestModifiedTime = modifiedTime;
      latestFile = file;
    }
  }

  if (!latestFile) {
    SpreadsheetApp.getActiveSpreadsheet().toast("目标文件夹中未找到Google Sheet文件");
    return;
  }

  // 打开最新Sheet的第一个工作表(可根据需求修改为指定工作表名称)
  const sourceSheet = SpreadsheetApp.openById(latestFile.getId()).getSheets()[0];
  // 获取所有有数据的单元格范围
  const sourceRange = sourceSheet.getDataRange();
  const sourceValues = sourceRange.getValues();

  // 写入日报Sheet
  const dailyReportSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dailyReportSheetName);
  // 清空目标区域(可选,若需要保留历史数据可注释此行)
  dailyReportSheet.getRange(targetStartCell, 1, sourceValues.length, sourceValues[0].length).clearContent();
  // 写入数据
  dailyReportSheet.getRange(targetStartCell, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);

  SpreadsheetApp.getActiveSpreadsheet().toast(`已完成数据导入,来源文件:${latestFile.getName()}`);
}

使用步骤

  1. 打开你的日报Google Sheet,点击「扩展程序」→「Apps Script」
  2. 将上述代码粘贴到脚本编辑器,替换folderId、dailyReportSheetName、targetStartCell为你的实际信息
  3. 点击保存按钮,命名项目(比如「日报自动导入」)
  4. 点击运行按钮,首次运行需授权脚本访问Google Drive和Sheet的权限(按提示完成授权即可)
  5. (可选)设置每日自动运行:在脚本编辑器点击「触发器」→「添加触发器」,选择函数importLatestSheetData,事件源选「时间驱动」,设置每日运行的时间(建议在对方团队上传文件之后)

方法2:动态生成IMPORTRANGE公式

此方法会在指定单元格插入动态生成的IMPORTRANGE公式,数据会实时同步,但首次需要手动授权跨文件访问。

function setDynamicImportRange() {
  const folderId = "YOUR_FOLDER_ID";
  const dailyReportSheetName = "日报";
  const targetCell = "A1"; // 公式插入位置
  const sourceSheetName = "Sheet1"; // 替换为对方Sheet的固定工作表名称

  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  
  let latestFile = null;
  let latestModifiedTime = new Date(0);

  while (files.hasNext()) {
    const file = files.next();
    const modifiedTime = file.getLastUpdated();
    if (modifiedTime > latestModifiedTime) {
      latestModifiedTime = modifiedTime;
      latestFile = file;
    }
  }

  if (!latestFile) {
    SpreadsheetApp.getActiveSpreadsheet().toast("未找到目标Google Sheet文件");
    return;
  }

  const fileId = latestFile.getId();
  // 生成IMPORTRANGE公式,可按需调整数据范围(比如"A1:Z100")
  const importFormula = `=IMPORTRANGE("${fileId}", "'${sourceSheetName}'!A1:Z")`;

  const dailyReportSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dailyReportSheetName);
  dailyReportSheet.getRange(targetCell).setFormula(importFormula);

  SpreadsheetApp.getActiveSpreadsheet().toast(`已设置动态导入公式,来源文件:${latestFile.getName()}`);
}

注意事项

  • 首次插入公式后,单元格会显示「#REF!」,点击单元格旁的「允许访问」按钮完成跨文件授权
  • 如果对方上传的Sheet没有固定工作表名称,可将公式中的'${sourceSheetName}'替换为工作表索引(比如"Sheet1"),但可能存在工作表顺序变化的风险

内容的提问来源于stack exchange,提问作者paresh patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:20:34