我正在尝试使用Apche-poi-3.9在XLS中创建下拉列表。 以下代码我写了::
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
答案 0 :(得分: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);
答案 1 :(得分:1)
它在Apache poi 3.9
中工作正常,我测试了它。只包括这些罐子
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