`
zhanghe086
  • 浏览: 55807 次
  • 性别: 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工作簿中插入图片。这将涵盖相关的API,步骤以及一些实用技巧。 首先,我们需要理解Excel的内部结构。在Excel文件中,图片是以OLE对象的形式存储的。POI提供了...

    通过POI将PPT插入图片并导出实例

    在这个实例中,我们将深入探讨如何利用POI库来创建一个PowerPoint演示文稿,并在其中插入图片。这个过程涉及到多个步骤,包括设置工作簿,创建幻灯片,以及添加图片到幻灯片。 首先,我们需要在项目中引入Apache ...

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

    在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...

    java实现在Excel中插入图片

    总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    要插入图片,首先需要获取图片的数据,通常是从文件系统或网络加载。这里我们假设图片位于项目资源目录下: ```java FileInputStream imageStream = new FileInputStream("path_to_your_image.jpg"); byte[] ...

    POI导出带图片的excel

    7. **插入图片**:使用Drawing对象的createPicture方法,传入字节数组和锚点信息,创建图片并添加到Sheet中。 ```java int pictureId = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG); ...

    Java利用poi对word插入文字图片

    3. **插入图片**:在Word文档中插入图片需要用到`XWPFPictureData`和`XWPFParagraph`的`addPicture`方法。首先,你需要读取图片文件,将其转换为字节数组,然后添加到文档中。以下是一个例子: ```java byte[] ...

    POI操作Excel完美生成水印

    3. **插入图片**:加载Excel工作簿后,你可以使用Sheet对象的createDrawingPatriarch()方法创建一个绘图父元素,这是在Excel工作表上添加图形的起点。接下来,使用ClientAnchor类来定位和设置图片的大小,并使用...

    利用POI解析excel并存入数据库demo

    这个 demo 的核心是将 Excel 文件中的数据与数据库交互,实现数据的导入。通过 POI,我们可以方便地处理各种格式的 Excel 文件,而 MySQL 数据库则提供了稳定的数据存储。这个过程对于数据迁移、数据备份或数据分析...

    POI操作Word中插入文本和图片

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本文中,我们将深入探讨如何使用Apache POI在Word文档中插入文本和图片,这对于创建动态报告模板尤其有用。 ...

    使用poi生成Excel所需要的jar包

    在POI-3.9版本中,你还可以使用高级特性,如图表、图片插入、公式计算等。不过要注意,这个版本相对较旧,可能不支持Apache POI的最新功能。对于新项目,通常建议使用较新的版本,以获取更好的性能和更多的功能支持...

    利用java往excel中插入图片

    本篇文章将详细介绍如何利用Java和Apache POI库向Excel工作表中插入图片。 首先,我们需要理解Apache POI的工作原理。POI提供了一个名为HSSFPatriarch的类,它是Excel中的图形绘制容器,可以用于插入图片。对于....

    java 通过poi操作excel jar包

    6. **图表和图片**:可以创建和修改Excel中的图表,插入图片到工作表中。 7. **高级功能**:如条件格式、数据验证、合并单元格等。 在实际使用中,Java开发者首先需要将对应的JAR包添加到项目的类路径中,然后就...

    Apache poi 操作 excel 文件压缩包

    - 插入图片、图表和公式。 - 设置单元格样式,如字体、颜色、边框和填充。 - 处理工作簿和工作表的合并。 - 导出和导入数据到数据库。 - 自动化Excel报告生成。 在实际应用中,Apache POI 往往用于数据分析、报表...

    struts2+poi实现excel文件的导出

    这个过程不仅限于简单的数据导出,你还可以根据需求实现更复杂的功能,如合并单元格、插入图片、公式计算等。同时,如果你需要支持 Excel 的导入,可以创建相应的 Action 方法,读取客户端上传的文件,然后利用 POI ...

    Java实现Excel读写的poi 5.2.1版本jar

    例如,通过使用POI库,你可以创建一个新的Excel工作簿,添加工作表,插入数据,设置单元格样式,应用公式,甚至处理图表和图片。同时,也可以读取已存在的Excel文件,提取数据,进行分析,然后将结果写回Excel或保存...

    使用poi从数据库导出excel表的示例

    在本示例中,我们将探讨如何使用Apache POI库从数据库导出数据到Excel表格,这在数据分析、报告生成或批量数据处理场景中非常常见。Apache POI是一个开源项目,它允许Java开发者创建、修改和显示Microsoft Office...

    POI实现全版本支持Excel读写工具包

    - **图表与图像**: 通过XSSF,可以创建、编辑和插入图表以及图片到Excel文件中。 - **样式与格式**: 提供了丰富的样式对象,可以设置单元格的填充、边框、字体样式等。 - **事件模型**: POI还提供了一个事件模型...

    使用POI和Excel VBA生成图表

    项目中想实现excel图表但POI不支持所以想到了这个方法。放上来抛砖引玉,感兴趣的欢迎大家交流 注:-------------------------------------------------------------------------- 其实现原理和利用JavaScript实现...

    使用POI解析excel文件并写入数据库

    Apache POI 是一个开源库,专门用于读取和写入Microsoft Office格式的文件,包括Excel(.xlsx 和 .xls)。本篇文章将详细讲解如何使用Apache POI解析Excel文件,并将数据写入数据库。 首先,我们需要了解Apache POI...

Global site tag (gtag.js) - Google Analytics