Java Excel 插入图片

  在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));

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

转载于:http://blog.csdn.net/chenssy/article/details/20524563

时间: 2024-10-14 07:00:30

Java Excel 插入图片的相关文章

Excel催化剂开源第40波-Excel插入图片做到极致的效果

不知道是开发人员的自我要求不高还是用户的使用宽容度足够大,在众多Excel插入图片的版本中,都没有考虑到许多的可大幅度提升用户体验的细节处理. Excel催化剂虽然开发水平有限,但也在有限的能力下,尽最大的努力做到自己可以过关的出街成品. 此篇着重谈下思路性的问题,代码因为太久远之前写的,现在看回也是一坨坨的,真需要时可能重新写一轮更方便. Excel插入图片的细节追求 可能在之前的文章中,也偶尔做了一些分享,自己也不太记得分享过哪些了,这里再重新梳理下,有重复提及的部分就权当复习好了. 一.插

excel 插入图片 NPOI

转载: http://www.cnblogs.com/wei325/p/4748324.html //创建一个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); //创建一个sheet ISheet sheet1 = workbook.CreateSheet("sheet1"); // 设置列宽,excel列宽每个像素是1/256 sheet1.SetColumnWidth(0, 18 * 256); sheet1.SetColumnWidt

2.4.5 用NPOI操作EXCEL--插入图片

我们知道,在Excel中是可以插入图片的.操作菜单是“插入->图片”,然后选择要插入图片,可以很容易地在Excel插入图片.同样,在NPOI中,利用代码也可以实现同样的效果.在NPOI中插入图片的方法与画图的方法有点类似: //add picture data to this workbook.byte[] bytes = System.IO.File.ReadAllBytes(@"D:\MyProject\NPOIDemo\ShapeImage\image1.jpg");int

java POI实现向Excel中插入图片

java POI实现向Excel中插入图片 标签: javapoiexcel 2014-03-05 08:59 9103人阅读 评论(4) 收藏 举报  分类: [JAVA开发]-----JavaScore(34)  版权声明:本文为博主原创文章,未经博主允许不得转载. 做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片,就是这个加入图片搞了好久.同时网络上确实

Java向Excel中插入图片

Java向Excel中插入图片 import java.io.FileOutputStream; import java.io.File; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.awt.image.BufferedImage; import javax.imageio.*; import org.apache.poi.hssf.usermodel.HSSFWorkbook; im

【excel技巧读书笔记002】批注插入图片表格

               今天看到学到一个excel小技巧,批注插入图片表格,觉得挺好分享给大家.

c#在Excel指定单元格中插入图片

方法一: /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度./// 注意:图片必须是绝对物理路径/// </summary>/// <param name="RangeName">单元格名称,例如:B4</param>/// <param name="PicturePath">要插入图片的绝对路径.</param>public void InsertPicture(string RangeNam

POI插入图片至Excel使用固定的长宽

使用POI在Excel里插入图片,如何使插入的图片使用固定的大小?先介绍原有的两种方式: 一种是指定开始和结尾单元格,然后从头画到尾,相当于平铺 还有一种就是仅指定开始的单元格,图片的大小跟这个单元格的长宽有关,可以放大缩小固定的倍数,相当于左对齐 第一种效果如下: 第二种效果如下: 第一种方法的关键代码如下: 1 private void pictureToSheet(Sheet finalSheet, Row row, Cell cell, int pictureIdx) { 2 Drawi

Excel:插入图片随表格隐藏,或显示

今天遇到个问题,在做数据表的时候,插入的图片一直显现,不随当前变化的表格做变化,十分不方便, 在网上查了查,又试了下,找到属性,可以处理这个问题,右键点击,选择大小和属性,大小和位置随单元格而变, 成功.. .. PS:此文仅为记录,不做他用 Excel:插入图片随表格隐藏,或显示