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文件在打开时总是报“文件错误,数据可能丢失”这种错误,求解?
分享到:
相关推荐
在本文中,我们将深入探讨如何使用POI库向Excel工作簿中插入图片。这将涵盖相关的API,步骤以及一些实用技巧。 首先,我们需要理解Excel的内部结构。在Excel文件中,图片是以OLE对象的形式存储的。POI提供了...
在这个实例中,我们将深入探讨如何利用POI库来创建一个PowerPoint演示文稿,并在其中插入图片。这个过程涉及到多个步骤,包括设置工作簿,创建幻灯片,以及添加图片到幻灯片。 首先,我们需要在项目中引入Apache ...
在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...
总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...
要插入图片,首先需要获取图片的数据,通常是从文件系统或网络加载。这里我们假设图片位于项目资源目录下: ```java FileInputStream imageStream = new FileInputStream("path_to_your_image.jpg"); byte[] ...
7. **插入图片**:使用Drawing对象的createPicture方法,传入字节数组和锚点信息,创建图片并添加到Sheet中。 ```java int pictureId = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG); ...
3. **插入图片**:在Word文档中插入图片需要用到`XWPFPictureData`和`XWPFParagraph`的`addPicture`方法。首先,你需要读取图片文件,将其转换为字节数组,然后添加到文档中。以下是一个例子: ```java byte[] ...
3. **插入图片**:加载Excel工作簿后,你可以使用Sheet对象的createDrawingPatriarch()方法创建一个绘图父元素,这是在Excel工作表上添加图形的起点。接下来,使用ClientAnchor类来定位和设置图片的大小,并使用...
这个 demo 的核心是将 Excel 文件中的数据与数据库交互,实现数据的导入。通过 POI,我们可以方便地处理各种格式的 Excel 文件,而 MySQL 数据库则提供了稳定的数据存储。这个过程对于数据迁移、数据备份或数据分析...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本文中,我们将深入探讨如何使用Apache POI在Word文档中插入文本和图片,这对于创建动态报告模板尤其有用。 ...
在POI-3.9版本中,你还可以使用高级特性,如图表、图片插入、公式计算等。不过要注意,这个版本相对较旧,可能不支持Apache POI的最新功能。对于新项目,通常建议使用较新的版本,以获取更好的性能和更多的功能支持...
本篇文章将详细介绍如何利用Java和Apache POI库向Excel工作表中插入图片。 首先,我们需要理解Apache POI的工作原理。POI提供了一个名为HSSFPatriarch的类,它是Excel中的图形绘制容器,可以用于插入图片。对于....
6. **图表和图片**:可以创建和修改Excel中的图表,插入图片到工作表中。 7. **高级功能**:如条件格式、数据验证、合并单元格等。 在实际使用中,Java开发者首先需要将对应的JAR包添加到项目的类路径中,然后就...
- 插入图片、图表和公式。 - 设置单元格样式,如字体、颜色、边框和填充。 - 处理工作簿和工作表的合并。 - 导出和导入数据到数据库。 - 自动化Excel报告生成。 在实际应用中,Apache POI 往往用于数据分析、报表...
这个过程不仅限于简单的数据导出,你还可以根据需求实现更复杂的功能,如合并单元格、插入图片、公式计算等。同时,如果你需要支持 Excel 的导入,可以创建相应的 Action 方法,读取客户端上传的文件,然后利用 POI ...
例如,通过使用POI库,你可以创建一个新的Excel工作簿,添加工作表,插入数据,设置单元格样式,应用公式,甚至处理图表和图片。同时,也可以读取已存在的Excel文件,提取数据,进行分析,然后将结果写回Excel或保存...
在本示例中,我们将探讨如何使用Apache POI库从数据库导出数据到Excel表格,这在数据分析、报告生成或批量数据处理场景中非常常见。Apache POI是一个开源项目,它允许Java开发者创建、修改和显示Microsoft Office...
- **图表与图像**: 通过XSSF,可以创建、编辑和插入图表以及图片到Excel文件中。 - **样式与格式**: 提供了丰富的样式对象,可以设置单元格的填充、边框、字体样式等。 - **事件模型**: POI还提供了一个事件模型...
项目中想实现excel图表但POI不支持所以想到了这个方法。放上来抛砖引玉,感兴趣的欢迎大家交流 注:-------------------------------------------------------------------------- 其实现原理和利用JavaScript实现...
Apache POI 是一个开源库,专门用于读取和写入Microsoft Office格式的文件,包括Excel(.xlsx 和 .xls)。本篇文章将详细讲解如何使用Apache POI解析Excel文件,并将数据写入数据库。 首先,我们需要了解Apache POI...