求Office Script:将Excel指定范围转为PNG插入Outlook 365邮件正文
Office Script 实现Excel指定区域导出为PNG并插入Outlook邮件正文
以下是适配Office 365云端环境的Office Script解决方案,可直接绑定到Excel按钮执行:
async function main(workbook: ExcelScript.Workbook) { // 1. 获取指定命名区域"form" const formRange = workbook.getRange("form"); if (!formRange) { throw new Error("未找到命名为'form'的区域,请检查区域命名是否正确"); } // 2. 将区域导出为base64格式的PNG图片 const imageBase64 = await formRange.getImageAsBase64(ExcelScript.PictureFormat.png); // 3. 构造Outlook邮件的HTML正文,嵌入base64图片 const htmlBody = ` <html> <body> <p>以下是提交的服务请求表单:</p> <img src="data:image/png;base64,${imageBase64}" alt="服务请求表单"> </body> </html> `; // 4. 创建Outlook邮件并预填信息 await OfficeRuntime.auth.getAccessToken({ allowConsentPrompt: true, allowSignInPrompt: true }); const mailPayload = { subject: "服务请求表单提交", toRecipients: ["指定收件人邮箱@domain.com"], // 替换为实际收件人邮箱 body: { content: htmlBody, contentType: "html" } }; // 调用Outlook API创建并发送邮件 const response = await fetch("https://graph.microsoft.com/v1.0/me/microsoft.graph.sendMail", { method: "POST", headers: { "Authorization": `Bearer ${await OfficeRuntime.auth.getAccessToken()}`, "Content-Type": "application/json" }, body: JSON.stringify({ message: mailPayload, saveToSentItems: true }) }); if (!response.ok) { throw new Error(`创建邮件失败:${await response.text()}`); } console.log("邮件已成功发送并保存到已发送邮件"); }
关键说明:
- 区域定位:通过
workbook.getRange("form")直接读取命名区域,确保Excel中已正确将$A$1:$I$27命名为form。 - 图片导出:使用
getImageAsBase64方法直接获取云端Excel区域的PNG编码,无需本地文件流转,完全适配Office 365环境。 - Outlook集成:依托Microsoft Graph API创建邮件,HTML正文直接嵌入base64图片,收件人预填只需修改
toRecipients数组内的邮箱地址。 - 权限处理:首次执行会弹出权限申请,需允许脚本访问Excel和Outlook的相关权限。
使用步骤:
- 在Excel网页版中,点击「自动化」→「新建脚本」,粘贴上述代码并保存。
- 回到工作表,通过「插入」→「按钮」添加控件,绑定刚保存的脚本。
- 测试执行:填写表单后点击按钮,自动生成带表单截图的Outlook邮件,收件人已预填完成。
可选调整:
- 若需将邮件保存为草稿而非直接发送,将Graph API路径改为
https://graph.microsoft.com/v1.0/me/messages,请求方法保持POST,移除saveToSentItems参数。 - 可自行修改邮件主题
subject和HTML正文内容,匹配业务场景需求。
内容的提问来源于stack exchange,提问作者scubacamper
相关产品推荐
相关产品推荐

