我创建了以下函数来设置excel中的单元格数据,但是当我设置数据时。该文件正在被破坏,我得到错误线程中的异常“主”java.lang.NoClassDefFoundError:org / openxmlformats / schemas / spreadsheetml / x2006 / main / CTDxfs $ 1 My Jars
public boolean setCellData(String sheetName,String colName,int rowNum, String data){
try{
fis = new FileInputStream(path);
workbook = new XSSFWorkbook(fis);
if(rowNum<=0)
return false;
int index = workbook.getSheetIndex(sheetName);
int colNum=-1;
if(index==-1)
return false;
sheet = workbook.getSheetAt(index);
row=sheet.getRow(0);
for(int i=0;i<row.getLastCellNum();i++){
//System.out.println(row.getCell(i).getStringCellValue().trim());
if(row.getCell(i).getStringCellValue().trim().equals(colName))
colNum=i;
}
if(colNum==-1)
return false;
sheet.autoSizeColumn(colNum);
row = sheet.getRow(rowNum-1);
if (row == null)
row = sheet.createRow(rowNum-1);
cell = row.getCell(colNum);
if (cell == null)
cell = row.createCell(colNum);
cell.setCellValue(data);
fileOut = new FileOutputStream(path);
workbook.write(fileOut);
fileOut.close();
}
catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
答案 0 :(得分:1)
您需要read the Apache POI FAQ!。具体来说,来自Apache POI FAQ entry on "I'm using the poi-ooxml-schemas jar, but my code is failing with "java.lang.NoClassDefFoundError: org/openxmlformats/schemas/something":
要使用新的OOXML文件格式,POI需要一个包含XMLBeans编译的文件格式XSD的jar。这些XSD一旦编译成Java类,就会存在于org.openxmlformats.schemas命名空间中。
有两个jar文件可用,如组件概述部分所述。所有模式的完整jar都是ooxml-schemas-1.3.jar,目前大约是15mb。较小的poi-ooxml-schemas jar只有4mb左右。后一个jar文件只包含通常使用的部分。
许多用户选择使用较小的poi-ooxml-schemas jar来节省空间。但是,poi-ooxml-schemas jar只包含通常使用的XSD和类,如单元测试所标识的那样。每隔一段时间,您可能会尝试使用未包含在最小poi-ooxml-schemas jar中的部分文件格式。在这种情况下,您应该切换到完整的ooxml-schemas-1.3.jar。从长远来看,您可能还希望提交一个新的单元测试,该测试使用XSD的额外部分,以便将来的poi-ooxml-schemas jar包含它们。
因此,从短期来看,您只需要从poi-ooxml-schemas
jar切换到更大(和完整)ooxml-schemas
jar ooxml-schemas-1.3.jar
。从长远来看,您需要向使用所需CT类的Apache POI项目提交junit测试,然后该类将在未来版本中自动包含在较小的poi-ooxml-schemas
jar中。