`

poi2.5.1与3.0之间所解决的一个Excel文件结束标签问题

    博客分类:
  • poi
 
阅读更多

注意此问题在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源码包,将依赖的POI2.5.1升级为高版本的POI

    原版的ExcelUtils依赖于Apache POI 2.5.1版本,这是一个开源的Java库,用于读写Microsoft Office格式的文件,包括Excel。然而,POI 2.5.1版本相对较老,不支持处理Excel 2007及以上版本创建的高版本Excel文件(XLSX...

    POI工具 poi-3.0-rc4

    Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在标题中提到的"POI工具 poi-3.0-rc4"是Apache POI的一个早期版本,它允许开发者使用Java语言来创建、读取和修改...

    excel poi-2.5.1.jar

    标题中的"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_poi 3.0-alpha3

    这个"poi-bin-3.0-alpha3-20061212.zip"是一个早期版本的POI库,它包含了JAVA对电子表格进行操作所需的所有组件。这个版本是3.0的Alpha3,发布于2006年12月12日,为开发者提供了对Microsoft Office文件格式的读取和...

    poi-3.0.jar 用于excel word的读取与写入

    在标题中提到的"poi-3.0.jar"是这个库的一个版本,它提供了API来读取、写入和修改这些文件。在这个场景中,我们主要关注其在Excel和Word处理上的应用。 1. **Excel读取与写入** Apache POI 提供了HSSF...

    POI导出Excel文件

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

    最新版poi 接口3.0

    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-2.5.1-final-20040804 (1).jar

    poi-bin-2.5.1-final-20040804.jar

    poi-bin-2.5.1-final-20040804

    poi-3.0 jar包和简单实例

    在这个“poi-3.0-FINAL”压缩包中,包含的是Apache POI 3.0版本的库文件,这个版本是POI项目的一个重要里程碑,提供了对Excel文件处理的强大支持。 在Java开发环境中,Apache POI允许程序员创建、修改和显示...

    Apache poi 操作 excel 文件压缩包

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在Java环境中,Apache POI 提供了一套API,使得开发者能够创建、修改和读取Excel文件。这个压缩包包含了Apache POI库的多个版本...

    导入poi jar包实现使用Beanshell读写Excel文件

    在Java编程环境中,Apache POI库是一个非常实用的工具,它允许我们操作Microsoft Office格式的文件,特别是Excel(.xls和.xlsx)文件。在JMeter测试框架中,我们可以结合使用POI库和BeanShell组件来读取和写入Excel...

    poi架包,三个版本(2.0,3.0,3.2)

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。这个压缩包包含了三个不同版本的POI库:2.0、3.0 和 3.2。每个版本都有其特定的功能和改进,下面我们将详细探讨这三个...

    利用POI合并多个Excel表

    在IT领域,Apache POI是一个广泛使用的Java库,它允许开发者读取、写入和修改Microsoft Office格式的文件,特别是Excel工作簿。本教程将深入探讨如何利用Apache POI库来合并多个Excel工作表,这对于处理大量数据或者...

    poi-3.0-rc4

    用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合并多个相同的Excel或者合并Word文件

    POI是Apache软件基金会的一个开源项目,它允许程序员读取、写入和修改Microsoft Office格式的文件,包括Excel(XLS, XLSX)和Word(DOC, DOCX)。 首先,让我们详细了解一下如何使用POI来合并Excel文件。在Excel中...

    poi解析excel文件

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java环境中,POI 提供了丰富的API来读取、写入和操作这些文件。标题提到的"poi解析excel文件"是利用Apache POI ...

    poi读取excel文件

    在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入以及修改Microsoft Office格式的文件,包括Excel的.xls和.xlsx格式。标题提到的"poi读取excel文件",指的是使用Apache POI库来处理...

    POI到处excel文件

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel。在这个场景中,"POI到处excel文件"意味着我们使用Apache POI库来创建、读取和修改Excel文档。以下是对这个主题的详细说明: ...

    使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

    在IT行业中,Apache POI是一个广泛使用的库,主要用于读取和写入Microsoft Office格式的文件,尤其是Excel。本文将深入探讨如何使用POI库来实现Excel文件的导出,以及如何将图片URL转换为图片文件并与其他文件一起...

Global site tag (gtag.js) - Google Analytics