如何发送Excel中图表到邮件

2020 年 2 月 12 日

如何发送Excel中图表到邮件

本文主要解决导出 Excel 中图表,截图到邮件中,发送邮件。


一、解决方案


方案一:使用类似 Excel 中图表的第三方前端图表例如 Echart 等,填充数据到 Echart,然后保存为图片,发送 邮件。问题是 Echart 等图表与 Excel 中图表有差别。


方案二:直接操作 Excel,填充数据后,截取 Excel 中图表为图片,发送邮件。


注:因方案一可直接实现,本文重点讲方案二


二、开发步骤 (方案二)


2.1、采用 jacob 调用 com 组件,将数据写入 Excel 中,生成图表,参考地址如下:


https://sourceforge.net/projects/jacob-project/


https://www.cnblogs.com/hold/archive/2013/05/24/3097096.html


2.2、录制 Excel 宏文件,复制图表,贴入剪切板,


参考地址如下: https://jingyan.baidu.com/article/90895e0fe9ee6164ec6b0b09.html


2.3、jacob 调用宏文件,保存为图片,主要代码如下。


col 1col 2


1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27 | //调用宏,保存为图片 List<String> dirLst = new ArrayList<>();


String tt = UtilImage.getTimeStr();


for (``int i = ``1``; i < ``6``; i++) {


toolExcel.callMacro(``"宏" + i);


``String dir = classpath + ``"excel/bf_" + tt + ``"_" + i + ``".png"``;


``UtilImage.getImageFromClipboard(dir);


``dirLst.add(dir);


}


/** * 调用excel宏 * * @param macroName 宏名 */


``public void callMacro(``String macroName) {


``Dispatch.call(xl, ``"Run"``, ``new Variant(macroName));


``}


``/** * 从剪切板获得图片。 */


public static Image getImageFromClipboard(``String igDir) throws Exception {


``Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();


``Transferable cc = sysc.getContents(``null``);


``if (cc == ``null``)


throw new Exception(``"内存图片为null"``);


``else if (cc.isDataFlavorSupported(DataFlavor.imageFlavor)) {


Image ig = (Image) cc.getTransferData(DataFlavor.imageFlavor);


``//存储图片 savePic(ig, igDir); return ig;


}


else { ``throw new Exception(``"内存中图片无"``);


}


}


2.4、图片存入 vm 邮件模板,主要代码如下:


col 1col 2


1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17 | <!DOCTYPE html>


<html>


<head>


``<meta charset=``"utf-8"``>


``<meta http-equiv=``"Content-Type" content=``"text/html; charset=gb2312"``/>


</head>


<body> <p>Dear all,</p> <p>昨日征信、流水、运营商爬取数据如下:${bz}(运营商月底月初官网不稳定)。</p> <img src=``"cid:image_1"``> <img src=``"cid:image_2"``> <img src=``"cid:image_3"``> <img src=``"cid:image_4"``> <img src=``"cid:image_5"``> <p style=``"margin-right:10px;margin-bottom:60px;"``>邮件时间 ${curDate}</p> </body> </html>


``class``=``"org.springframework.ui.velocity.VelocityEngineFactoryBean"``>


``<property name=``"velocityProperties"``>


``<props>


``<prop key=``"resource.loader"``>file</prop>


``<prop key=``"file.resource.loader.path"``>.</prop>


``<prop key=``"file.resource.loader.class"``>


``org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader


``</prop>


三、注意事项


3.1、图片采用 cid 标注发送;不能采用 base64 对图片进行编码放入页面中发送(图片在 Foxmail 能正常显示, outlook 不能正常显示);


3.2、宏录取单个图片高度不能大于 1728 像素,图片过高在 outlook 中会缩放,可以截取多个图片在邮件 vm 模 板中拼接。


3.3、部署注意事项


col 1col 2


1


2


3 | 部署环境:window server ``2008 jacob版本:jacob-``1.17``-M2


``引入jacob.jar包,


jacob-``1.17``-M2-x64.dll需要拷贝jre\bin中


3.4、Excel 需要保持为支持宏文件.xlsm 文件;


在 Excel 选项——>信任中心——>消息栏——>选为:从不显示有关被阻止内容的信息;


Excel 选项——>信任中心——>宏设置——>启用所用宏;


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/195


2020 年 2 月 12 日 15:2865

评论

发布
暂无评论
发现更多内容

架构师训练营第 1 期第七周总结

Leo乐

极客大学架构师训练营

性能优化一第七周作业「架构师训练营第 1 期」

天天向善

第七周作业总结

Geek_ce484f

极客大学架构师训练营

架构师训练营 - 第七周作业

一个节点

极客大学架构师训练营

架构师训练营第三周作业

Sandman

第三章总结

孤星

架构师训练营—第七周作业

Geek_shu1988

第七周作业

Geek_ce484f

极客大学架构师训练营

设计模式

小黄鱼

极客大学架构师训练营

架构师训练营第 1 期第七周作业

Leo乐

极客大学架构师训练营

Week3总结

lggl

作业

架构师训练营第七周学习总结

Gosling

极客大学架构师训练营

Week3作业一

幸福小子

单例模式

7.7 第七周课后练习

张荣召

查理·芒格商业投资原则检查清单

Z

投资 商业 原则 清单

把打胜仗的决心作为信仰

吴晨曦

创业

第三章课后作业

博博

Week3小结

幸福小子

设计模式

架构师训练营第 1 期 -第七周作业

睁眼看世界

极客大学架构师训练营

第三周作业

孤星

架构师训练营 - 第七周总结

一个节点

极客大学架构师训练营

week07作业

追风

架构师一期

第七周作业

icydolphin

极客大学架构师训练营

架构课第三周学习总结

路路

极客大学架构师训练营

架构课第三周作业

路路

极客大学架构师训练营

架构师训练营—第七周学习总结

Geek_shu1988

极客大学架构师训练营

架构师训练营第七周课程笔记及心得

Airs

架构一期第七周作业

Airs

Navicat无法连接MySQL怎么办?

MySQL从删库到跑路

MySQL navicat 3306端口

第三章学习笔记

博博

性能测试中并发量与响应时间和吞吐量的关系

天天向上

极客大学架构师训练营

如何发送Excel中图表到邮件-InfoQ