我有以下代码。其目的是使用 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/