最近遇到一個問題,特與大家一起分享一下,如果用POI對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("d:\\test11.jpg"));
ImageIO.write(bufferImg, "jpg", byteArrayOut);
// 读入图片2
ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();
bufferImg1 = ImageIO.read(new File("d:\\test22.png"));
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();
}
}
}
}
試著用一個循環來插入圖片,不知道可我怎么試都不成功!是不是哪裡還少了什么。下面是我的代碼:
public static void main(String[] args) {
FileOutputStream fileOut = null;
BufferedImage bufferImg = null;
BufferedImage bufferImg1 = null;
try {
//创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("new sheet");
//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
for (int i = 0; i < 20; i++) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
bufferImg = ImageIO.read(new File("c:\\wwwroot\\smeposV3\\images\\logo.jpg"));
ImageIO.write(bufferImg, "jpg", byteArrayOut);
//HSSFRow row = sheet1.createRow(2);
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, bufferImg.getWidth(), bufferImg.getHeight(), (short) 0, i, (short) 3, i+5);
//插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
}
fileOut = new FileOutputStream("c:/workbook.xls");
//写入excel文件
wb.write(fileOut);
fileOut.close();
} catch (IOException io) {
io.printStackTrace();
System.out.println("io erorr : " + io.getMessage());
} finally {
if (fileOut != null) {
try {
fileOut.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
如何循環加入圖片呢?請大家幫幫忙!謝謝了!
上面這個問題終於解決了,原來我把HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();這個對象放在循環裡去了,它只能聲明一次,下次再遇到,記住了!
分享到:
相关推荐
在本文中,我们将深入探讨如何使用POI库向Excel工作簿中插入图片。这将涵盖相关的API,步骤以及一些实用技巧。 首先,我们需要理解Excel的内部结构。在Excel文件中,图片是以OLE对象的形式存储的。POI提供了...
本篇文章将深入探讨如何利用POI库在Word文档中进行模板替换以及循环插入表格的操作。 首先,我们需要理解Apache POI的工作原理。POI提供了HWPFOI(用于处理老版的.doc文件)和XWPF(用于处理新版的.docx文件)两个...
4. 在段落中插入图片:创建一个`XWPFRun`对象,然后创建`XWPFPicture`并将其添加到段落中。 ```java XWPFRun pictureRun = paragraph.createRun(); XWPFPicture pictureInstance = paragraph.createPicture...
3. **插入图片**:Apache POI允许我们在Word文档中插入图片。首先,你需要将图片读入内存,这可以使用InputStream实现。然后,通过创建一个XWPFPictureData对象,将图片数据添加到文档的图片数据部分。最后,在需要...
在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...
在这个例子中,我们将探讨如何使用POI库来处理Word文档,特别是利用模板文件循环输出表格行并导出新的Word文档。这个过程在数据分析、报告生成或自动化文档制作等场景中非常有用。 首先,我们需要理解Word文档的...
7. **FreeMarkerDemo**:这个文件可能是一个Java类,实现了Freemarker和Apache POI的集成,用于生成Word文档并插入图片。它可能包含了一个或者多个方法,如`generateWordWithImage()`,这个方法接收模板文件、数据...
总结来说,这段代码展示了如何使用Java POI库创建一个动态Word文档生成器,它能够根据查询结果填充数据,合并单元格,调整文本样式,以及插入图片。这个功能对于生成报告、证书或任何需要自定义文本和图像的文档非常...
在这个场景中,我们将探讨如何使用iText在Word文档中插入图片和绘制表格。 首先,理解一个关键概念:iText本身并不直接支持Word格式。然而,由于Word文档可以被转换为或从OpenXML格式解析,我们可以通过处理这些XML...
在实际应用中,我们还需要考虑性能优化,比如使用PreparedStatement防止SQL注入,批量插入数据以减少数据库交互次数,以及合理设置内存缓冲大小以避免内存溢出。此外,为了提供良好的用户体验,我们还可以添加错误...
使用POI动态生成Word文档,可以在Java程序中方便地插入文本、图片以及其他复杂格式元素,同时也可以进行数据填充,如报告、信件模板的自动化生成。 描述中提到了POI与Freemarker的对比,其中POI的兼容性相对差一些...
网络上的根据模板填充Word我都看过一些, 它们的功能在数据换行的时候用的是run对象的.addCarriageReturn()方法,或者是直接用\n实现换行。这些都不符合我的需求, 因为我要的是分段,而不是换行。...
在实际应用中,开发者通常会根据需求构建复杂的逻辑,如数据遍历、条件判断和循环,以实现自动化处理Word文档中的表格数据。Apache POI提供了丰富的API,使得这些操作变得相对简单。在进行开发时,务必查阅官方文档...
通过这两个例子,你应该对如何使用Apache POI库向Excel文件中插入图片有了清晰的理解。请注意,实际应用中需要处理异常,确保文件路径的有效性,并根据需求调整图片大小和位置。此外,记得始终关闭打开的流和工作簿...
在本教程中,我们将探讨如何利用Freemarker模板来导出Word文档,并实现循环插入图片和表格的功能。这对于需要批量生成定制化报告或者文档的应用场景非常有用。 首先,我们需要了解Freemarker的基本语法。在...
- **公式支持**:POI允许在单元格中插入Excel公式,如`=SUM(A1:A5)`。 - **图表和图像**:XSSF支持创建图表,HSSF则不支持。同时,可以添加图片到工作表,但需要注意不同版本的限制。 - **数据格式化**:可以定义...
通过WordprocessingDocument类,我们可以添加新的段落、修改文本、插入图片,甚至创建和修改表格。这使得POI成为处理Word文档的强大工具。 四、动态生成Excel表格 在Java中,我们经常使用Excel模板来动态生成报告...
此外,Apache POI还支持复杂的操作,如公式计算、样式设置、图表创建、图片插入等。通过深入学习和熟练使用POI库,Java开发者可以在不依赖Microsoft Office的情况下,轻松地处理大量Office文档,这对于数据处理、...
- 插入图表、图片或超链接。 - 处理大数据量时,考虑使用Streaming Usermodel API以减少内存消耗。 - 处理已存在的Excel文件,读取数据并进行修改后再保存。 标签“导出excel”进一步强调了重点,这个项目可能是...
- **图表和图像**:虽然POI对图表和图像的支持相对有限,但仍然可以创建和修改简单的图表,以及插入图片到工作表中。 - **事件模型**:对于处理大型文件,可以使用SXSSF的事件模型,仅保留最近使用的行在内存中,...