ITPub博客

首页 > > > 如何发送Excel中的图表到邮件

如何发送Excel中的图表到邮件

作者:宜信技术学院 时间:2019-08-06 15:44:00 0 删除 编辑


本文主要解决导出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调用宏文件,保存为图片。

主要代码如下

//调用宏,保存为图片 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邮件模板

主要代码如下

<!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>

<!-- 邮件引擎 --> <bean id="velocityEngine"

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>


三、注意事项

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

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

部署注意事项

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

引入jacob.jar包,

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


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

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

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

作者:王春强

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69918724/viewspace-3130276/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
宜信技术学院是宜信旗下的金融科技能力展示与输出平台。通过分享在金融科技领域的开源成果、研发实践促进金融科技生态圈企业创新升级。

注册时间:2019-04-30

  • 博文量
    579
  • 访问量
    307764