2011-05-10 38 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

相關問題