注意此问题在poi的changlog中并没有体现。
针对2.5.1版本中代码如下:
类:org.apache.poi.hssf.usermodel.HSSFWorkbook
方法:
public HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)
throws IOException
{
this.preserveNodes = preserveNodes;
if (preserveNodes) {
this.poifs = fs;
}
sheets = new ArrayList(INITIAL_CAPACITY);
names = new ArrayList(INITIAL_CAPACITY);
InputStream stream = fs.createDocumentInputStream("Workbook");
EventRecordFactory factory = new EventRecordFactory();
//excel默认为3个sheet记录数为390条记录,偏移量始终从291开始,每增加一行,则记录总数增加2,每增加一列加1
List records = RecordFactory.createRecords(stream);
workbook = Workbook.createWorkbook(records);
setPropertiesFromWorkbook(workbook);
int recOffset = workbook.getNumRecords();
int sheetNum = 0;
//如果只有一个sheet则记录数为322,偏移量为289
while (recOffset < records.size())
{
Sheet sheet = Sheet.createSheet(records, sheetNum++, recOffset );
//正确的数据应该每一格SHEET记录处理完成后他的偏移了为322+他的记录行数与列数,
//这里需要获得结束标签的所处的位置数,为什么要加1,因为是从0推的
recOffset = sheet.getEofLoc()+1;
//针对2.5.1如果excel文件的结束标签有问题,则会导致计算不出来结束标签的位置,这样就会造成返回的地recOffset偏移量为1;所以后来在2007年的3.0正式版本中弥补了此处的问题,加入了一个判断
if(recOffset == 1){
break;
}
sheet.convertLabelRecords(
workbook); // convert all LabelRecord records to LabelSSTRecord
HSSFSheet hsheet = new HSSFSheet(workbook, sheet);
sheets.add(hsheet);
// workbook.setSheetName(sheets.size() -1, "Sheet"+sheets.size());
}
for (int i = 0 ; i < workbook.getNumNames() ; ++i){
HSSFName name = new HSSFName(workbook, workbook.getNameRecord(i));
names.add(name);
}
}
如果是2.5版本的poi还需要修改为以下红色部分
nameRecord = findExistingRowColHeaderNameRecord(sheetIndex);
if (removingRange )
{
if (nameRecord != null)
workbook.removeName(findExistingRowColHeaderNameRecordIdx(sheetIndex+1));
return;
}
if ( nameRecord == null )
{
nameRecord = workbook.createBuiltInName(NameRecord.BUILTIN_PRINT_TITLE, sheetIndex+1);
//does a lot of the house keeping for builtin records, like setting lengths to zero etc
isNewRecord = true;
}
相关推荐
原版的ExcelUtils依赖于Apache POI 2.5.1版本,这是一个开源的Java库,用于读写Microsoft Office格式的文件,包括Excel。然而,POI 2.5.1版本相对较老,不支持处理Excel 2007及以上版本创建的高版本Excel文件(XLSX...
Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在标题中提到的"POI工具 poi-3.0-rc4"是Apache POI的一个早期版本,它允许开发者使用Java语言来创建、读取和修改...
标题中的"excel poi-2.5.1.jar"提到了一个关键组件——Apache POI,这是一个流行的开源Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel文档。在这个场景下,2.5.1是该库的一个特定版本。Apache POI...
这个"poi-bin-3.0-alpha3-20061212.zip"是一个早期版本的POI库,它包含了JAVA对电子表格进行操作所需的所有组件。这个版本是3.0的Alpha3,发布于2006年12月12日,为开发者提供了对Microsoft Office文件格式的读取和...
在标题中提到的"poi-3.0.jar"是这个库的一个版本,它提供了API来读取、写入和修改这些文件。在这个场景中,我们主要关注其在Excel和Word处理上的应用。 1. **Excel读取与写入** Apache POI 提供了HSSF...
Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。这个"最新版poi接口3.0"显然指的是Apache POI库的3.0.1版本,它包含了对Office文件格式的强大支持,并且提供了Java API...
poi-2.5.1-final-20040804 (1).jar
poi-bin-2.5.1-final-20040804
在这个“poi-3.0-FINAL”压缩包中,包含的是Apache POI 3.0版本的库文件,这个版本是POI项目的一个重要里程碑,提供了对Excel文件处理的强大支持。 在Java开发环境中,Apache POI允许程序员创建、修改和显示...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在Java环境中,Apache POI 提供了一套API,使得开发者能够创建、修改和读取Excel文件。这个压缩包包含了Apache POI库的多个版本...
在Java编程环境中,Apache POI库是一个非常实用的工具,它允许我们操作Microsoft Office格式的文件,特别是Excel(.xls和.xlsx)文件。在JMeter测试框架中,我们可以结合使用POI库和BeanShell组件来读取和写入Excel...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。这个压缩包包含了三个不同版本的POI库:2.0、3.0 和 3.2。每个版本都有其特定的功能和改进,下面我们将详细探讨这三个...
在IT领域,Apache POI是一个广泛使用的Java库,它允许开发者读取、写入和修改Microsoft Office格式的文件,特别是Excel工作簿。本教程将深入探讨如何利用Apache POI库来合并多个Excel工作表,这对于处理大量数据或者...
用java导入导出 excel所需要的jar包,里面包含 poi-3.0-rc4-20070503.jar poi-contrib-3.0-rc4-20070503.jar poi-scratchpad-3.0-rc4-20070503.jar 这三个jar包
POI是Apache软件基金会的一个开源项目,它允许程序员读取、写入和修改Microsoft Office格式的文件,包括Excel(XLS, XLSX)和Word(DOC, DOCX)。 首先,让我们详细了解一下如何使用POI来合并Excel文件。在Excel中...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java环境中,POI 提供了丰富的API来读取、写入和操作这些文件。标题提到的"poi解析excel文件"是利用Apache POI ...
在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入以及修改Microsoft Office格式的文件,包括Excel的.xls和.xlsx格式。标题提到的"poi读取excel文件",指的是使用Apache POI库来处理...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel。在这个场景中,"POI到处excel文件"意味着我们使用Apache POI库来创建、读取和修改Excel文档。以下是对这个主题的详细说明: ...
在IT行业中,Apache POI是一个广泛使用的库,主要用于读取和写入Microsoft Office格式的文件,尤其是Excel。本文将深入探讨如何使用POI库来实现Excel文件的导出,以及如何将图片URL转换为图片文件并与其他文件一起...