Проблема политики HSSFell MissingCell

Я пытаюсь прочитать excel как (.xls, так и .xlsx), используя java. Я смог правильно прочитать xlsx. Но когда я читаю файл xls со следующим кодом

final HSSFCell cell = row.getCell(i, Row.RETURN_BLANK_AS_NULL);

я получаю сообщение об ошибке

java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFRow.getCell(ILorg/apache/poi/ss/usermodel/Row$MissingCellPolicy;)Lorg/apache/poi/hssf/usermodel/

Пожалуйста помоги. Я использую poi-3.9-20121203.jar


person Amar    schedule 01.07.2013    source источник
comment
Пользовались ли вы ранее какой-либо старой версией POI?   -  person Sankumarsingh    schedule 01.07.2013
comment
использовать System.out.println(HSSFWorkbook.class.getProtectionDomain().getCodeSource().getLocation()); чтобы найти связанную версию poi.   -  person Sankumarsingh    schedule 01.07.2013


Ответы (1)


Это описано в часто задаваемых вопросах по Apache POI. Если вы посмотрите, вы увидите, что где-то в вашем пути к классам скрывается более старая копия Apache POI, так что на самом деле вы работаете со смесью двух версий. Это не поддерживается — все банки POI должны быть одной версии!

В часто задаваемых вопросах есть пример кода, который можно использовать для поиска Jar на самом деле используется, так что, надеюсь, вы сможете отследить эту старую банку. Вы хотели бы сделать что-то вроде:

ClassLoader classloader =
   org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
             "org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("Core POI came from " + path);

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

person Gagravarr    schedule 01.07.2013