如何用Google Apps Script将谷歌表格转为仅值Excel并邮件发送且存云端副本
实现谷歌表格转数值版Excel并发送邮件+存云端硬盘的脚本
以下是完整的Google Apps Script代码,直接替换占位符后即可使用:
function convertSheetToExcelAndSend() { // 替换为你的原谷歌表格ID const sourceSpreadsheetId = "YOUR_SPREADSHEET_ID"; // 替换为收件人邮箱 const recipientEmail = "recipient@example.com"; // 替换为邮件主题 const emailSubject = "仅含数值的Excel文件"; // 替换为邮件正文 const emailBody = "您好,附件是转换后的Excel文件(仅含数值)。"; // 替换为要保存文件的云端硬盘文件夹ID(可选,留空则保存到根目录) const targetFolderId = "YOUR_FOLDER_ID"; try { // 1. 获取原表格并创建临时副本 const sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId); const tempSpreadsheet = SpreadsheetApp.create("临时数值表格"); const sourceSheets = sourceSpreadsheet.getSheets(); // 2. 将原表格的所有工作表内容(仅数值)复制到临时表 sourceSheets.forEach(sheet => { const tempSheet = tempSpreadsheet.insertSheet(sheet.getName()); const sourceRange = sheet.getDataRange(); sourceRange.copyTo(tempSheet.getRange(1,1), {contentsOnly: true}); }); // 删除临时表默认的第一个空白工作表 tempSpreadsheet.deleteSheet(tempSpreadsheet.getSheets()[0]); // 3. 将临时表导出为Excel格式 const tempFileId = tempSpreadsheet.getId(); const tempFile = DriveApp.getFileById(tempFileId); const excelBlob = tempFile.getAs(MimeType.MICROSOFT_EXCEL); excelBlob.setName(`${sourceSpreadsheet.getName()}_仅数值版.xlsx`); // 4. 将Excel文件保存到云端硬盘 let savedFile; if (targetFolderId) { const targetFolder = DriveApp.getFolderById(targetFolderId); savedFile = targetFolder.createFile(excelBlob); } else { savedFile = DriveApp.createFile(excelBlob); } // 5. 发送带附件的邮件 MailApp.sendEmail({ to: recipientEmail, subject: emailSubject, body: emailBody, attachments: [savedFile] }); // 6. 清理临时表格(可选,若需保留可注释此行) DriveApp.getFileById(tempFileId).setTrashed(true); console.log("操作完成:Excel已保存并发送邮件"); } catch (error) { console.error("操作失败:", error); // 可选:发送错误通知邮件 // MailApp.sendEmail(recipientEmail, "转换失败通知", `错误信息:${error.message}`); } }
关键代码说明
- 替换公式为数值:使用
copyTo方法时传入{contentsOnly: true},确保只复制单元格的数值结果,而非原公式。 - 导出Excel格式:通过
getAs(MimeType.MICROSOFT_EXCEL)将谷歌表格文件转换为Excel的Blob对象,再设置文件名。 - 保存到云端硬盘:根据指定的文件夹ID,将Blob对象创建为文件;若未指定文件夹ID,则保存到云端硬盘根目录。
- 发送邮件:
MailApp.sendEmail支持直接传入云端硬盘文件作为附件,无需额外处理。
注意事项
- 替换代码中所有大写的占位符(如
YOUR_SPREADSHEET_ID),你可以在谷歌表格的URL中找到表格ID,云端硬盘文件夹ID同理。 - 首次运行脚本时,会弹出权限授权提示,按照步骤完成授权即可(需使用谷歌账号登录)。
- 临时表格默认会被移到回收站,若需要保留临时表用于调试,可注释掉
setTrashed(true)这一行。 - 若你的表格包含多个工作表,脚本会全部复制并转换,无需额外修改。
内容的提问来源于stack exchange,提问作者dhimitriph
相关产品推荐
相关产品推荐

