Groovy / POI возвращает разные итераторы в разных системах - PullRequest
2 голосов
/ 11 мая 2011

У меня есть следующий код. Его цель - запустить файл xls с помощью 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();

моя система возвращает

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

Что я и ожидал. Находясь в другой системе, он возвращает следующее

java.util.HashMap$ValueIterator@38fff7

Есть идеи по поводу этих расхождений?

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Я согласен с @Gagravarr ... у вас где-то другая версия чего-то

И, к вашему сведению, более «классная» версия вашего кода будет:

(0..<numberOfSheets).each { sheetNumber ->
  HSSFSheet sheet = workBook.getSheetAt( sheetNumber )
  sheet.rowIterator().each { row ->
    row.cellIterator().each { cell ->
      allEntityFile << cell.toString()
    } 
    allEntityFile << "\n" 
  }
}
2 голосов
/ 11 мая 2011

Вы уверены, что используете обе версии POI в обеих системах? И вы используете HSSF на обоих?

Последние версии HSSF всегда должны возвращать вам org.apache.poi.hssf.usermodel.HSSFRow $ CellIterator .

В XSSF итератор, который вы получаете, берется из TreeMap (это итератор значений), поэтому я не ожидал бы итератор HashMap, но я бы ожидал java.util один

Это заставляет меня думать, что вы, возможно, не используете одну и ту же версию POI в обоих местах

См. FAQ по POI , чтобы узнать, как проверить, какой JAR-файл вы используете для POI

...