求助:使用Apps Script将Google Sheet导出为Excel格式至Google Drive
解决将Google表格导出为Excel并备份到Drive文件夹的问题
我明白你的需求啦——现在的代码只能复制Google表格格式的文件到目标文件夹,但你想要的是导出成Excel格式的备份。别担心,我们只需要修改代码逻辑,从「复制表格文件」改成「导出表格内容为Excel并保存」就可以了。
下面是修改后的完整代码,我会在后面解释关键改动:
function exportAsExcelBackup() { // 生成带时间戳的文件名,加上.xlsx后缀 var formattedDate = Utilities.formatDate(new Date(), "CET", "yyyy-MM-dd' 'HH:mm"); var fileName = "Backup Copy " + formattedDate + ".xlsx"; // 替换成你的目标文件夹ID(就是你原代码里的那个ID) var destinationFolderId = "1vFL98cgKdMHLNLSc5..."; var destinationFolder = DriveApp.getFolderById(destinationFolderId); // 获取要备份的Google表格(如果是运行当前表格的脚本,用getActiveSpreadsheet即可;如果是指定其他表格,用openById并传入表格ID) var sourceSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 如果你要备份的不是当前打开的表格,替换成下面这行并填写表格ID: // var sourceSpreadsheet = SpreadsheetApp.openById("你的Google表格ID"); // 构造Excel格式的导出URL var exportUrl = "https://docs.google.com/spreadsheets/d/" + sourceSpreadsheet.getId() + "/export?format=xlsx"; // 通过UrlFetchApp获取Excel文件内容,需要带上OAuth令牌进行身份验证 var response = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() } }); // 将获取到的内容转换成Blob对象,并设置文件名 var excelBlob = response.getBlob().setName(fileName); // 将Blob保存到目标文件夹 destinationFolder.createFile(excelBlob); Logger.log("Excel备份已成功保存:" + fileName); }
关键改动说明:
- 从「复制文件」改为「导出内容」:原代码是直接复制Google表格文件,现在我们通过Google Sheets的官方导出接口,直接获取Excel格式的文件内容。
- 身份验证:添加了
Authorization请求头,带上脚本的OAuth令牌,确保脚本有权限访问和导出你的表格内容。 - 文件名后缀:给文件名加上了
.xlsx后缀,保证保存的是标准Excel格式文件。 - Blob对象处理:将导出的内容转换成Blob,再保存到目标文件夹,这是Drive API中创建文件的标准方式。
使用注意事项:
- 第一次运行脚本时,会弹出权限授权提示,你需要允许脚本访问你的Google表格和Drive文件,这样才能完成导出和保存操作。
- 如果要备份的不是当前打开的表格,记得替换代码中
sourceSpreadsheet的获取方式,改成openById并填入目标表格的ID。
内容的提问来源于stack exchange,提问作者Erika




