`
chenssy
  • 浏览: 62275 次
  • 性别: Icon_minigender_1
  • 来自: 岳阳
社区版块
存档分类
最新评论

java POI实现向Excel中插入图片

阅读更多

做Web开发免不了要与Excel打交道。今天老大给我一个任务-导出Excel。开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可。但是有一点不同,就是要加入图片,就是这个加入图片搞了好久。同时网络上确实没有发现比较好的资料,所以写这篇博文记录之,供自己和博友们查询,参考。

在POI中有HSSFPatriarch对象,该对象为画图的顶级管理器,它的createPicture(anchor, pictureIndex)方法就能够在Excel插入一张图片。所以要在Excel中插入图片,三步就可以搞定。一、获取HSSFPatriarch对象,二、new HSSFClientAnchor对象,三、调用createPicture方法即可。实现倒是非常容易实现,如果想把它做好还是有点儿难度的。这里我们先插入一张图片:

public class ExcelImageTest {
    public static void main(String[] args) {
         FileOutputStream fileOut = null;   
         BufferedImage bufferImg = null;   
        //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray  
        try {
            ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();   
            bufferImg = ImageIO.read(new File("F:/图片/照片/无名氏/小昭11.jpg"));   
            ImageIO.write(bufferImg, "jpg", byteArrayOut);
            
            HSSFWorkbook wb = new HSSFWorkbook();   
            HSSFSheet sheet1 = wb.createSheet("test picture");  
            //画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
            HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();   
            //anchor主要用于设置图片的属性
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8);   
            anchor.setAnchorType(3);   
            //插入图片  
            patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); 
            fileOut = new FileOutputStream("D:/测试Excel.xls");   
            // 写入excel文件   
             wb.write(fileOut);   
             System.out.println("----Excle文件已生成------");
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(fileOut != null){
                 try {
                    fileOut.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

如下为执行后的结果:


至于为什么会是这样的结果,主要是因为HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8)这个构造函数造成的,下面我就来解释这个构造函数:HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,short col1,int row1,short col2, int row2);各个参数的含义如下:

dx1:the x coordinate within the first cell。

dy1:the y coordinate within the first cell。

dx2:the x coordinate within the second cell。

dy2:the y coordinate within the second cell。

col1:the column (0 based) of the first cell。

row1:the row (0 based) of the first cell。

col2:the column (0 based) of the second cell。

row2:the row (0 based) of the second cell。

这里dx1、dy1定义了该图片在开始cell的起始位置,dx2、dy2定义了在终cell的结束位置。col1、row1定义了开始cell、col2、row2定义了结束cell。


下面是有两个不同的构造函数所创建的,从这幅图中我们可以清晰看到上面八个参数的含义和不同之处。


上面是插入一张图片,那么实现插入多张图片呢?其实很简单,构造多个不同的HSSFClientAnchor对象,控制好那八个参数,如下:

HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 1023,100,(short) 1, 1, (short)5, 8); 
            HSSFClientAnchor anchor2 = new HSSFClientAnchor(0, 0, 1023,100,(short) 1, 9, (short)5, 16); 
            
            //插入图片  
            patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); 
            patriarch.createPicture(anchor2, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

其余代码一样,得到如下结果:


下篇我将提供一个Excel生成的通用模板,支持自定样式、标题、写入图片等!!

分享到:
评论

相关推荐

    java实现在Excel中插入图片

    java实现在Excel中插入图片有时碰到下载excel中加入图片或已经制作好的图章。

    利用java往excel中插入图片

    利用java往excel中插入图片 POI利用java往excel中插入图片POI形式

    POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格

    POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格

    POI导出带图片的excel

    利用POI技术将图片插入到excel中,希望对大家有用,直接运行ExportExcel类,即可看到效果!!!

    使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图)

    使用poi在excel中生成各种常见的图像,比如饼状图(普通饼状图、三D图,环状体、折线图、柱状图、等~~)

    java写入excel图片操作

    java写入excel图片操作 包含需要的类库和相应的代码

    EXCEL固定位置插入图片

    使用apache-poi向EXCEL固定位置插入图片,xlsx版本,xls版本可自行修改读取excel的对象。由于前半段是多excel和图片资源做分类读取,就只放核心代码。

    解决POI3.10 添加图片不成功的问题

    解决POI3.10在添加图片的时候自身有一个BUG。纠结了很久都没解决,今天终于弄好了,文件包中附带了修改好的jar包bsj-poi-ooxml-3.10-FINAL-20140208.jar。主要问题是出在:org.apache.poi.xwpf.usermodel.XWPFRun....

    导出Excel多个单元格合并及图片插入

    一般在导出Excel中,在创建工作表sheet后,初始化的sheet中row都是一行一行的...方案:使用POI在Excel中插入多张图片,由于平台中只保存图片的url地址,所以首先需要获取图片数据,然后转换为二进制,最后将图片插入。

    Windows中使用Java生成Excel文件并插入图片的方法

    主要介绍了Windows中使用Java生成Excel文件并插入图片的方法,其中向Excel中插入图片文中通过使用Apache POI来实现,需要的朋友可以参考下

    poi操作Excel的各种解释

    poi操作Excel的各种解释 对Excel导出和导入,对Excel的合并列,插入图片等

    使用EasyPOI导出Excel模板数据(含图片)博文源码

    博文《使用EasyPOI导出Excel模板数据(含图片)》所含源码,应众多网友要求放出来。包含测试类、导出工具类、图像工具类、Excel模板

    POI实战总结

    15、插入图片 16、调整工作表位置 17、设置打印区域 18、标注脚注 19、在工作单中清空行数据,调整行位置 20、选中指定的工作表 21、工作表的放大缩小 22、头注和脚注 23、自定义颜色 24、填充和颜色设置...

    JAVA办公自动化系统的设计

    文档处理模块:该模块可以打开、编辑、保存各种类型的文档,例如Word、Excel、PPT等,同时还可以设置文档样式、插入图片、表格等。 表格编辑模块:该模块可以创建、编辑各种类型的表格,例如Excel表格、Access...

    java范例开发大全源代码

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例...

    easyexcel:Poi导出excel二次封装

    easyexcel Base on Poi 1、自定义模板可以继承Template类,参考DefaultTemplate。 2、目前只提供了一个默认的模板类。...5、目前暂时不支持打印样式,图片插入,超链接等。 工程中自带了example,简单实用

    java范例开发大全

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...

    Java范例开发大全 (源程序)

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例144 ...

    Java范例开发大全(全书源程序)

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 ...

    java范例开发大全(pdf&源码)

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...

Global site tag (gtag.js) - Google Analytics