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

Google App Script 按文件名筛选文件并提取属性录入表格咨询

代码优化方案
  • 取消冗余的数组转换步骤,遍历临时文件夹时直接保留文件对象,避免后续重复调用Drive API搜索文件
  • 已登记文件名转Set结构,大幅提升大数量下的比对效率
  • 批量构建新增行数据,一次性写入表格,减少Spreadsheet API调用次数,提升运行速度
  • 原代码需要额外实现的SearchFiles搜索逻辑已整合到主流程,降低函数联动复杂度

优化后完整代码

const invoiceLog = SpreadsheetApp.openById('SPREADSHEETID').getSheetByName('invoicedata');
const tempInvoiceFolder = DriveApp.getFolderById('TEMPFOLDERID');
// 未用到的全局常量可以先注释/删除,避免冗余API调用
// const invoiceDispatcherLog = SpreadsheetApp.openById('SPREADSHEETID').getSheetByName('invoicedispatcherlog');
// const invoiceFolder2021 = DriveApp.getFolderById('INVOICEFOLDERID');

function invoiceLogger () {
  // 1. 读取临时文件夹所有文件,同时存储文件名和文件对象
  const tempFiles = [];
  const fileIterator = tempInvoiceFolder.getFiles();
  while (fileIterator.hasNext()) {
    const file = fileIterator.next();
    tempFiles.push({
      name: file.getName(),
      obj: file
    });
  }

  // 2. 读取已登记文件名,转Set提升比对效率
  const existingNames = new Set(
    invoiceLog.getRange('A2:A').getValues()
      .flat()
      .filter(item => item) // 过滤表格空行
  );

  // 3. 筛选未登记的文件,无新文件直接退出
  const newFiles = tempFiles.filter(file => !existingNames.has(file.name));
  if (newFiles.length === 0) return;

  // 4. 构建待写入的行数据,可根据实际表格列顺序调整属性排列
  // 当前默认列顺序:文件名、文件大小、修改日期、文件ID、文件URL
  const rowsToAdd = newFiles.map(file => {
    const f = file.obj;
    return [
      f.getName(),
      f.getSize(),
      f.getLastUpdated(),
      f.getId(),
      f.getUrl()
    ];
  });

  // 5. 批量写入表格
  invoiceLog.getRange(
    invoiceLog.getLastRow() + 1, // 从已有数据的下一行开始写入
    1, // 从第一列开始写入
    rowsToAdd.length, // 写入行数
    rowsToAdd[0].length // 写入列数
  ).setValues(rowsToAdd);
}

关键逻辑说明

  • Set比对优势:如果表格已有上千条记录,Array.includes每次比对都要遍历整个数组,Set.has直接哈希匹配,速度可提升数十倍
  • 批量写入优势:如果有100个新文件,逐行调用appendRow需要调用100次API,一次性写入仅需1次,运行速度更快,还不容易触发API调用限额
  • 可选优化:如果存在重名文件的可能,可以在比对时增加文件大小+修改日期的双重校验,避免漏登记或重复登记

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:15:03