使用POI在Excel中添加外部图片

本篇的代码主要参考自poi讨论组:http://apache-poi.1045710.n5.nabble.com/Load-remote-image-inside-excel-sheet-td5709821.html

在通常情况下,我们在Excel中添加图片,只要是通过流的方式将图片写入excel特定的picture对象中。网上也有很多的例子,本文主要讲的是如何将一个外部的图片以链接的方式添加进excel中。这样,图片以外链的方式存储,在后台写excel文件时不需要处理图片存储的问题,在下载excel时也不用担心文件太大的问题了。

首先在excel添加外部图片,在添加图片时,只需要选择 以 链接的方式添加即可。这样,在excel时存储时并不需要存储实际图片的内容。这种方式也支持添加网络上的图片。分析这2种不同的添加方式,通过将xlsx文件进行解压(直接将文件修改为zip后缀,再解压即要)之后,在路径 \xl\drawings\_rels下面的文件drawing1.xml.rels可看到以下的不同内容:

<!-- 外部引用存储 -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="file:///C:\Users\Administrator\Desktop\图像%202.png" TargetMode="External"/></Relationships>
<!-- 内部引用存储 -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="../media/image1.png"/></Relationships>

同上可以看出,两者的区别就在于一个是引用一个../media的内部地址,实际上就是把整个图片写在内部压缩文件的一个位置上。而外部存储,则实际上直接写的是一个原始的地址。以协议名://地址的方式进行引用。
当然,不相同的地址肯定不只这一种,以上图片只是标识。虽然poi不支持添加外部图片,但通过poi自带的相关API,我们仍是可以添加外部图片的,使用的API,就是poi内部使用的工具openxml4j。

继续阅读“使用POI在Excel中添加外部图片”