我有以下代码。其目的是使用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
有关此差异的任何想法?
答案 0 :(得分:2)
您确定在两个系统上都运行相同版本的POI吗?你们两个都在使用HSSF吗?
最新版本的HSSF应始终向您返回 org.apache.poi.hssf.usermodel.HSSFRow $ CellIterator 。
使用XSSF,你得到的迭代器取自TreeMap(它是值迭代器),所以我不希望有一个HashMap迭代器,但我希望有一个java.util一个
这让我觉得你可能在两个地方都没有使用相同版本的POI
请参阅POI FAQ了解如何检查您用于POI的jar文件
答案 1 :(得分:2)
我同意@Gagravarr ......你在某个地方有不同版本的东西
而且,你的代码的更“'groovy'版本将是:
(0..<numberOfSheets).each { sheetNumber ->
HSSFSheet sheet = workBook.getSheetAt( sheetNumber )
sheet.rowIterator().each { row ->
row.cellIterator().each { cell ->
allEntityFile << cell.toString()
}
allEntityFile << "\n"
}
}