`
zhanghe086
  • 浏览: 54168 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

POI实现Excel插入图片

阅读更多
POI的操作Excel时,不可避免有操作图片的处理。怎么插入图片呢?网上也有不少介绍。

   下面的代码是向Excel中插入多张图片的例子:

   public static void main(String[] args) {  
            FileOutputStream fileOut = null;  
            BufferedImage bufferImg = null;  
            BufferedImage bufferImg1 = null;  
            try {  
                // 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray  
                // 读入图片1  
                ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();  
                bufferImg = ImageIO.read(new File("**.jpg"));  
               ImageIO.write(bufferImg, "jpg", byteArrayOut);  
                 
               // 读入图片2  
               ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();  
               bufferImg1 = ImageIO.read(new File("**"));  
               ImageIO.write(bufferImg1, "png", byteArrayOut1);  
    
               // 创建一个工作薄  
               HSSFWorkbook wb = new HSSFWorkbook();  
               HSSFSheet sheet1 = wb.createSheet("test picture");  
               HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();  
               HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,  
                       (short) 1, 1, (short) 5, 5);  
               anchor.setAnchorType(3);  
               HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 255, 255,  
                       (short) 6, 6, (short) 10, 10);  
               anchor1.setAnchorType(3);  
               // 插入图片1  
               patriarch.createPicture(anchor, wb.addPicture(byteArrayOut  
                       .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));  
               // 插入图片2  
               patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut1  
                       .toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));  
    
               fileOut = new FileOutputStream("d:/workbook.xls");  
               // 写入excel文件  
               wb.write(fileOut);  
               fileOut.close();  
           } catch (IOException io) {  
               io.printStackTrace();  
               System.out.println("erorr : " + io.getMessage());  
           } finally {  
               if (fileOut != null) {  
                   try {  
                       fileOut.close();  
                   } catch (IOException e) {  
                       e.printStackTrace();  
                   }  
               }  
           }  
       }  
    

这边的效果没有保持原来的倍率,有点失真了,是因为HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 5, 5); 这个构造函数的原因。

HSSFClientAnchor构造函数参数的意义如下:

     * @param dx1   the x coordinate within the first cell.
     * @param dy1   the y coordinate within the first cell.
     * @param dx2   the x coordinate within the second cell.
     * @param dy2   the y coordinate within the second cell.
     * @param col1  the column (0 based) of the first cell.
     * @param row1  the row (0 based) of the first cell.
     * @param col2  the column (0 based) of the second cell.
     * @param row2  the row (0 based) of the second cell.

其中dx1,dy1这个点是定义图片在开始cell中的起始位置。这个点是开始cell的左上为原点,相对比率来确定的。不是绝对坐标。

dx2,dy2这个点是定义图片在终了cell的终了位置。这个点是终了cell的左上为原点,相对比率来确定的。不是绝对坐标。

col1,row1是定义开始cell。

col2,row2是定义终了cell。

如果我们想要保持原始的图片大小,改一下上面代码中的下面部分就可以了。

  修改前:patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

  修改后:patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
                    .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(1);

其中resize是放大或缩小的函数。用了这个函数后,HSSFClientAnchor构造函数中的图片显示的终了cell位置就不起作用了。



以上方法虽然实现了向excel中插入图片,但是下载下来的excel文件在打开时总是报“文件错误,数据可能丢失”这种错误,求解?
分享到:
评论
1 楼 ih0qtq 2012-07-18  
<以上方法虽然实现了向excel中插入图片,但是下载下来的excel文件在打开时总是报“文件错误,数据可能丢失”这种错误,求解? >

你解决这个问题了吗? 我也遇到相同的问题, 困惑。

相关推荐

    POI向excel中插入图片

    POI向excel中插入图片

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

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

    java实现在Excel中插入图片

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

    POI导出带图片的excel

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

    利用java往excel中插入图片

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

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

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

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

    poi操作Excel的各种解释

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

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

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

    POI操作excel封装工具类

    支持对excel的两中格式操作,封装了往单元格插入数据(支持书写单元格引用或者单元格坐标)、设置和获取sheet及workbook、往excel特定位置插入图片、获取excel中所有的图片、复制sheet、移除sheet、复制sheet中的...

    java写入excel图片操作

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

    POI实战总结

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

    导入excel的具体实现2003版excel

    导入excel文件,结合具体的Struts框架,有一定的局限性

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

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

    freemarker-excel.zip

    使用`Freemarker`导出Excel后,在整合`poi`插入图片到Excel,从而实现`Freemarker`导出带有图片的Excel工具。

    easyexcel:Poi导出excel二次封装

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

    使用Excel中创建图表

    $ sBitmap:图片的完整路径或预设的质感用来填充对象的背景 $ bTextureTile:如果真集图片或预设的质地由$ sBitmap瓷砖定义 其他事项 ============= *变量的命名现在坚持更加AutoIt的UDF标准 ------------------...

    JAVA办公自动化系统的设计

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

    Java_Web开发实战1200例第1卷.part2

    21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存报表 844 22.6 高级报表 850 第6篇 ...

Global site tag (gtag.js) - Google Analytics