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

将文件夹最新Excel转Google Sheet的函数移至共享云端硬盘后失效

解决Shared Drive下Excel转Google Sheet函数失效问题

问题根源

Shared Drive(共享云端硬盘)的文件操作逻辑和个人Drive存在差异,原代码未适配以下核心要求:

  • Drive API调用未声明支持Shared Drive
  • 文件搜索、复制操作需要额外的权限参数

修改后的完整代码

function newestExceltoSheetsDF(SOURCE_XLS_FOLDER, dstFolderId, postBackSheetName) {
  const sourceFolder = DriveApp.getFolderById(SOURCE_XLS_FOLDER);
  // 构建适配Shared Drive的搜索查询,排除已删除文件
  const searchQuery = `mimeType='${MimeType.MICROSOFT_EXCEL}' or mimeType='${MimeType.MICROSOFT_EXCEL_LEGACY}' and trashed=false`;
  const sourceFiles = sourceFolder.searchFiles(searchQuery);

  const fileList = [];
  while (sourceFiles.hasNext()) {
    const file = sourceFiles.next();
    fileList.push({
      name: file.getName(),
      id: file.getId(),
      createdDate: file.getDateCreated()
    });
  }

  // 校验文件列表,按创建时间倒序取最新文件
  if (fileList.length === 0) {
    throw new Error("源文件夹中未找到有效Excel文件");
  }
  fileList.sort((a, b) => new Date(b.createdDate) - new Date(a.createdDate));
  const newestFile = fileList[0];

  // 复制并转换Excel为Google Sheet,关键参数适配Shared Drive
  const convertedSheet = Drive.Files.copy(
    {
      mimeType: MimeType.GOOGLE_SHEETS,
      parents: [{ id: dstFolderId }]
    },
    newestFile.id,
    { supportsAllDrives: true } // 必须添加:告知API处理共享云端硬盘文件
  );

  // 读取转换后的Sheet数据
  const spreadsheet = SpreadsheetApp.openById(convertedSheet.id);
  const sheet = spreadsheet.getSheets()[0];
  let values = sheet.getDataRange().getValues();
  
  // 移除首行(业务需求保留)
  values.shift();

  // 将数据写入目标工作表
  const targetSS = SpreadsheetApp.getActive();
  const targetSheet = targetSS.getSheetByName(postBackSheetName);
  if (!targetSheet) {
    throw new Error(`未找到名为${postBackSheetName}的工作表`);
  }
  targetSheet.clearContents();
  targetSheet.getRange(1, 1, values.length, values[0].length).setValues(values);

  // 清理临时转换文件
  DriveApp.getFileById(convertedSheet.id).setTrashed(true);
}

关键修改点说明

  • 添加supportsAllDrives: true参数:在Drive.Files.copy的第三个参数中加入该标识,这是Shared Drive操作的必填项,否则API无法识别共享硬盘内的文件。
  • 增强错误校验:添加文件为空、目标工作表不存在的判断,避免无意义的运行报错。
  • 优化搜索逻辑:在查询中加入trashed=false,排除已移入回收站的无效文件。
  • 变量命名优化:调整变量名提升代码可读性,例如arr改为fileList,date改为createdDate。

额外注意事项

  1. 启用Drive API:在脚本编辑器的「扩展」→「Apps Script API」中确认已启用,同时在「服务」菜单中添加Drive API(选择v2版本)。
  2. 权限配置:确保运行脚本的账号对目标Shared Drive拥有编辑权限,否则会触发权限不足的错误。
  3. 文件访问权限:如果Shared Drive内的Excel文件由外部用户上传,需确保当前账号有该文件的访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:30:53