java - Groovy/POI 在不同系统上返回不同迭代器

标签 java groovy iterator apache-poi

我有以下代码。其目的是使用 POI 运行 xls 文件并将所有数据写入 txt 文件。

for ( sheetNumber in 0..numberOfSheets-1) {
    HSSFSheet sheet = workBook.getSheetAt(sheetNumber)
    Iterator<HSSFRow> rows = sheet.rowIterator()
    while(rows.hasNext()){
        row = rows.next()
        Iterator<HSSFCell> cells = row.cellIterator();
        println "cell:" + cells.toString()
        while(cells.hasNext()){
            cell = cells.next()
            allEntityFile << cell.toString()
        } 
    allEntityFile << "\n" 
    }
}

在我的机器上这段代码工作正常,但在另一台计算机上似乎有问题。我把范围缩小到这个。当我尝试创建单元格迭代器时

Iterator<HSSFCell> cells = row.cellIterator();

我的系统返回

org.apache.poi.hssf.usermodel.HSSFRow$CellIterator@156b386

这正是我所期望的。在另一个系统上它返回以下内容

java.util.HashMap$ValueIterator@38fff7

关于这种差异有什么想法吗?

最佳答案

您确定在两个系统上运行相同版本的 POI 吗?您在两者上都使用 HSSF 吗?

最新版本的 HSSF 应始终向您返回org.apache.poi.hssf.usermodel.HSSFRow$CellIterator

使用 XSSF,您返回的迭代器取自 TreeMap(它是值迭代器),因此我不会期望 HashMap 迭代器,但我会期望 java.util 迭代器

这让我认为您可能没有在两个地方使用相同版本的 POI

请参阅POI FAQ了解如何检查您正在为 POI 使用哪个 jar 文件

关于java - Groovy/POI 在不同系统上返回不同迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957256/

相关文章:

java - 停止与 udp 服务器的线程

java - 表示 RDBMS 中另一个日期之前或之后一定天数的日期

java - 远程 JMX 连接

groovy - 通过动态键访问 groovy 映射

c++ - 正确迭代 vector 的建议

c++ - STL 迭代器上下文中的奇异值和非奇异值是什么?

java - 在 ListView 中合并联系人

jenkins - 使用 Jenkins Pipeline 共享库上的版本

grails - 在Groovy Source文件夹中使用Grails 3服务的最佳方法是什么?

javascript - 循环对象的对象