2011-05-10 33 views
2

我有以下代码。其目的是使用POI运行一个xls文件并将所有数据写入一个txt文件。Groovy/POI在不同系统上返回不同的迭代器

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(); 

我的系统会返回

[email protected]

这是我会期望。而在另一个系统上它返回以下

[email protected]

这个不符任何想法?

回答

2

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

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

随着XSSF,你回来的迭代器从一个TreeMap(它的值迭代器)拍摄的,所以我不希望一个HashMap的迭代器,但我希望个java.util一个

这让我想到,你可能不会在这两个地方使用POI相同版本的

POI FAQ如何检查你使用的POI

+0

什么是简单的解决方案。谢谢。 – KevinO 2011-05-11 14:56:55

2

我@Gagravarr同意其jar文件......你有不同版本的东西

而仅供参考,您的代码更“常规”版本将是:

(0..<numberOfSheets).each { sheetNumber -> 
    HSSFSheet sheet = workBook.getSheetAt(sheetNumber) 
    sheet.rowIterator().each { row -> 
    row.cellIterator().each { cell -> 
     allEntityFile << cell.toString() 
    } 
    allEntityFile << "\n" 
    } 
} 
+0

大groovification。我一直在和一些对Groovy语法有点谨慎的Java老手合作。所以我必须一件件地偷偷摸摸。 – KevinO 2011-05-11 14:58:22

相关问题