0 0

POI保存excel时IndexOutOfBoundsException0

// 创建报告sheet
			hssfWorkbook.createSheet("report");
			HSSFSheet newSheet = hssfWorkbook.getSheetAt(templateSheetIndex + 1);
			this.copyRows(hssfWorkbook, templateSheet, newSheet, templateSheet.getFirstRowNum(), lastSheetRow, 0);
			// 设置列宽
			HSSFRow _hssfRow = templateSheet.getRow(0);
			int columnNum = _hssfRow.getPhysicalNumberOfCells();
			for (int i = 0; i < columnNum; i++) {
				newSheet.setColumnWidth(i, templateSheet.getColumnWidth(i));
			}
			System.out.println("设置列宽完成");
			
			// 复制图片
			this.copyPictures(hssfWorkbook, pictures, templateSheetIndex, newSheet, 0);
			
			String reportPath = "E:/workspace/" + new Date().getTime() + ".xls";

			// 导出巡检报告
			fileOutputStream = new FileOutputStream(new File(reportPath));
			hssfWorkbook.write(fileOutputStream);

当执行hssfWorkbook.write()时会报数组越界异常,异常信息如下:
java.lang.IndexOutOfBoundsException: Index: 2, Size: 1
	at java.util.ArrayList.RangeCheck(ArrayList.java:547)
	at java.util.ArrayList.get(ArrayList.java:322)
	at org.apache.poi.hssf.model.DrawingManager2.getDrawingGroup(DrawingManager2.java:125)
	at org.apache.poi.hssf.model.DrawingManager2.allocateShapeId(DrawingManager2.java:71)
	at org.apache.poi.hssf.record.EscherAggregate.convertPatriarch(EscherAggregate.java:988)
	at org.apache.poi.hssf.record.EscherAggregate.convertUserModelToRecords(EscherAggregate.java:821)
	at org.apache.poi.hssf.record.EscherAggregate.getRecordSize(EscherAggregate.java:508)
	at org.apache.poi.hssf.model.InternalSheet.preSerialize(InternalSheet.java:1567)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWorkbook.java:1285)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1205)


当去掉复制图片这一行时,就一切正常:
// 复制图片
this.copyPictures(hssfWorkbook, pictures, templateSheetIndex, newSheet, 0);

下面是复制图片的方法:
private void copyPictures(HSSFWorkbook workbook, List<MyPictureData> pictures, int sourceSheetIndex, HSSFSheet targetSheet, int pPosition) {
		// 画图的顶级管理器,一个sheet只能有一个
		HSSFPatriarch patriarch = targetSheet.createDrawingPatriarch();
		
		for (MyPictureData data : pictures) {
			// 只复制指定sheet中的图片
			if (data.getSheetIndex() == sourceSheetIndex) {
				HSSFPictureData pictureData = data.getPictureData();
				int dx1 = data.getDx1();
				int dy1 = data.getDy1();
				int dx2 = data.getDx2();
				int dy2 = data.getDy2();
				short col1 = data.getCol1();
				int row1 = data.getRow1();
				short col2 = data.getCol2();
				int row2 = data.getRow2();
				
				// anchor主要用于设置图片的属性
				HSSFClientAnchor anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2, col1, row1 + pPosition, col2, row2 + pPosition);
	            // 0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells
	            anchor.setAnchorType(3);
	            // 插入图片  
	            patriarch.createPicture(anchor, workbook.addPicture(pictureData.getData(), pictureData.getFormat()));
			}
		}
	}


不知道是哪里的问题?求指点,谢谢咯。
2014年10月29日 12:04
目前还没有答案

相关推荐

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

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

    使用poi解析excel文件,并将数据写入到数据库 项目说明 这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL...

    poi excel poi excel poi excel

    ### POI Excel知识点详解 ...掌握 POI 的基本用法对于开发人员来说是非常有用的技能,特别是在需要处理大量数据时更是如此。希望本文能够帮助您更好地理解和使用 Apache POI 进行 Excel 文件的操作。

    POI导出Excel文件

    Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...

    利用POI读取excel写入到word

    在IT行业中,Apache POI是一个广泛使用的开源库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。本篇文章将详细讲解如何利用Apache POI库来读取Excel数据并将其写入到Word文档中。 首先,...

    POI生成Excel POI操作Excel POI读取Excel POI类库

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel。在这个场景中,我们关注的是如何使用POI来创建、读取和操作Excel文档。在Web项目中,这种功能通常用于数据导入导出,报表生成...

    POI 删除excel列

    POI 删除excel列,可以设置多列,POI里怎么没有删除列的API呢

    POI操作Excel完美生成水印

    在Java编程领域,Apache POI 是一个非常流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel(XLS和XLSX)。本教程将深入探讨如何利用Apache POI来在Excel文件中完美地生成水印。水印通常...

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...

    POI向excel中插入图片

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,包括Excel。在本文中,我们将深入探讨如何使用POI库向Excel工作簿中插入图片。这将涵盖相关的API,步骤以及一些实用技巧。 首先,我们需要...

    POI 生成EXCEL2007【含例子】

    标题 "POI 生成EXCEL2007【含例子】" 涉及到的知识点主要集中在Apache POI库的使用上,这是一个强大的Java API,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel文件。在这个场景中,重点是创建和操作...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    poi读写excel+poi总结

    读取Excel文件时,首先需要使用POI的FileInputStream打开文件,然后创建与文件类型对应的Workbook实例。之后,通过Workbook获取Sheet,再通过Sheet获取Row和Cell,读取其值。 7. 遍历数据 遍历Excel文件通常需要...

    POI使用Excel模板文件循环输出行并导出Excel

    4. **保存和关闭**: 在所有数据写入后,我们需要保存到新的Excel文件并关闭工作簿和输入流,以释放资源。 ```java FileOutputStream out = new FileOutputStream("output.xlsx"); workbook.write(out); out.close()...

    POI的EXCEL导出,自动换行

    - **兼容性问题**:虽然Apache POI支持多种Excel版本,但在实际使用过程中可能会遇到一些兼容性问题,特别是在处理某些特殊格式或功能时。因此,在正式部署前进行全面的测试是非常重要的。 - **性能优化**:当处理...

    poi读写excel

    poi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excelpoi读写excel

    poi 操作excel模板

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在Java开发中,POI库被广泛用于生成、修改和读取Excel文档。本篇将深入探讨如何利用Apache POI来操作Excel模板,以及如何读取数据...

    Java POI 生成Excel时显示货币格式

    在使用Java POI生成Excel时,为了使数据更易读和专业,我们经常需要设置单元格的格式,特别是当涉及到金额时,使用货币格式可以使数字更加直观。以下是一段示例代码,展示了如何在Excel单元格中设置货币格式: ```...

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

    Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,如 Word、Excel 和 PowerPoint。在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效...

    POI导出Excel表格

    在Java编程领域,Apache POI是一个非常流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,特别是Excel工作簿(.xls或.xlsx)。在这个“POI导出Excel表格”的实例中,我们将深入探讨如何利用Apache...

Global site tag (gtag.js) - Google Analytics