无法在Excel中设置单元格数据

时间:2017-09-20 05:22:19

标签: java apache-poi

我创建了以下函数来设置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;
}

1 个答案:

答案 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中。