如何不修改原Excel文件,用脚本将Google Drive内的Excel转为Google Sheets
Google Drive Excel文件转Google Sheets集成实现方案
你的集成思路完全可行,当前筛选流程已经遍历了所有符合条件的目标Excel文件,直接嵌入转换逻辑无需二次遍历,执行效率更高。
前置准备
首先需要在你的Apps Script项目中启用Drive API:
- 打开脚本编辑器,点击左侧「服务」选项的「+」号
- 在弹出的服务列表中找到「Drive API」,选择V3版本后添加即可
修改后的完整代码
function getChildFiles(parentName, parent, sheet) { // 筛选条件:符合名称要求的Excel文件 var fileIter = parent.searchFiles("title contains 'completed'and title contains 'Verification Visit Direct Suppliers'and mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'"); var output = []; var now = new Date(); var date = new Date(); var copy = new Date(date); // 可选:指定转换后的文件存储文件夹,不填则默认和源Excel同目录 // var targetFolder = DriveApp.getFolderById('你的目标文件夹ID'); while (fileIter.hasNext()) { var file = fileIter.next(); var fileName = file.getName(); var fileType = file.getMimeType(); var filecreatedate = file.getDateCreated(); var fileUpdate = file.getLastUpdated(); var path = parentName + ' |--> ' + fileName; var fileID = file.getId(); var Url = 'https://drive.google.com/open?id=' + fileID; // ------------------- 新增转换逻辑开始 ------------------- // 配置转换参数:指定转换为Google Sheets格式 var convertConfig = { title: fileName.replace(/\.xlsx$/, '') + '(已转换)', // 转换后的文件名,可自定义 mimeType: MimeType.GOOGLE_SHEETS // 若要指定存储到特定文件夹,加下面这行 // parents: [targetFolder.getId()] }; // 调用Drive API执行转换 var convertedFile = Drive.Files.copy(convertConfig, fileID); // 拿到转换后的Google Sheets信息 var convertedFileId = convertedFile.id; var convertedFileUrl = 'https://docs.google.com/spreadsheets/d/' + convertedFileId; // ------------------- 新增转换逻辑结束 ------------------- // 输出新增两列:转换后文件ID、转换后文件链接,原7列变为9列 output.push([fileID, fileName, path, Url, filecreatedate, fileUpdate, copy, convertedFileId, convertedFileUrl]); Logger.log(fileType); } if (output.length) { var last_row = sheet.getLastRow(); // 注意范围列数从7改成9,对应新增的两列 sheet.getRange(last_row + 1, 1, output.length, 9).setValues(output); SpreadsheetApp.flush(); } var childFolders = parent.getFolders(); while (childFolders.hasNext()) { var childFolder = childFolders.next(); var childFolderName = childFolder.getName(); getChildFiles( parentName + ' |--> ' + childFolderName, childFolder, sheet); } }
核心说明
- 转换逻辑调用Drive V3 API的
Files.copy方法,不需要手动下载上传,可直接在云端完成格式转换 - 转换完成后返回的
convertedFileId就是Google Sheets格式的文件ID,后续提取数据直接调用SpreadsheetApp.openById(convertedFileId)即可正常执行,不会再报错 - 可选优化:如果需要避免重复转换,可以在转换前先查询目标目录下是否存在对应转换完成的文件,存在则直接复用已有ID跳过转换步骤
权限注意事项
脚本运行账号需要对源Excel文件所在目录、转换后文件存储目录拥有编辑权限,否则会触发权限报错。
内容的提问来源于stack exchange,提问作者Vishnu Kumaran
相关产品推荐
相关产品推荐

