2013-03-18 2 views
0

Я пытаюсь создать раскрывающийся список в XLS, используя Apche-poi-3.9. После кода я написал ::apche-poi-3.9 + создание Dropdown

public class TestMacroTemplate { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String args[]) throws FileNotFoundException { 
     HSSFWorkbook workbook = new HSSFWorkbook(); 
     HSSFSheet sheet = workbook.createSheet("Data Validation"); 
     CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); 
     DVConstraint dvConstraint = DVConstraint 
       .createExplicitListConstraint(new String[] { "10", "20", "30" }); 
     DataValidation dataValidation = new HSSFDataValidation(addressList, 
       dvConstraint); 
     dataValidation.setSuppressDropDownArrow(false); 
     sheet.addValidationData(dataValidation); 
     FileOutputStream fileOut = new FileOutputStream("XLCellDropDown.xls"); 
     try { 
      workbook.write(fileOut); 
      fileOut.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Но это дает следующее исключение:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.addValidationData(Lorg/apache/poi/ss/usermodel/DataValidation;)V 
    at ejb.TestMacroTemplate.main(TestMacroTemplate.java:31) 

И тот же код работает с Apache-пои-3,2

Пожалуйста, помогите мне.

Спасибо, Nirav

ответ

1

Он отлично работает в Apache poi 3.9 и я испытал it.just вкл.доставкой этих банок

poi-scratchpad-3.9-20121203.jar 
poi-3.9-20121203.jar 
poi-examples-3.9-20121203.jar 
poi-excelant-3.9-20121203.jar 
poi-ooxml-3.9-20121203.jar 
poi-ooxml-schemas-3.9-20121203.jar 
3

Apache POI имеет FAQ on this very problem. Я процитирую оттуда, как это будет решить вашу проблему

Мой код использует некоторые новые функции, отлично компилируется, но терпит неудачу, когда в прямом эфире с «MethodNotFoundException», «NoSuchMethodError» или «IncompatibleClassChangeError»

У вас почти наверняка есть более старая версия POI на вашем пути к классам. Довольно много времени выполнения и другие пакеты отправят более старую версию POI, так что это простая проблема, которая ударит без вашего понимания.

Лучший способ идентифицировать предыдущий файл jar с нарушением - это несколько строк java. Они загружат один из основных классов POI и сообщают, откуда он.

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); 
Смежные вопросы