2013-03-18 48 views
0

我正在尝试使用Apche-poi-3.9在XLS中创建下拉列表。 下面的代码我写::apche-poi-3.9 +创建下拉列表

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的POI-3.2

请帮助我。

感谢, Nirav

回答

1

它工作在Apache poi 3.9不错,我已经测试it.just incluse这些罐子

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