将文件夹最新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。
额外注意事项
- 启用Drive API:在脚本编辑器的「扩展」→「Apps Script API」中确认已启用,同时在「服务」菜单中添加Drive API(选择v2版本)。
- 权限配置:确保运行脚本的账号对目标Shared Drive拥有编辑权限,否则会触发权限不足的错误。
- 文件访问权限:如果Shared Drive内的Excel文件由外部用户上传,需确保当前账号有该文件的访问权限。
内容的提问来源于stack exchange,提问作者Einarr
相关产品推荐
相关产品推荐

