我有一个java代码,可以将一些数据导出到excel文件中。(我只在下面列出了我认为是代码中相关的部分)
一切工作正常,但后来我升级我的xalan从2. 7. 2到2. 7. 3,它停止工作。原因- java.lang.ClassNotFoundException:org.apache.xml.serializer.OutputPropertiesFactory
在'wb.write(fileOutputStream);'在export()方法下的行
import org.apache.logging.log4j.Level;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
private Workbook wb;
private void init(String targetPath, String fileName, ExcelExportType exportType) {
exportedFile = new File(Paths.get(targetPath, fileName + FILE_EXTENSION).toString());
try {
fileOutputStream = new FileOutputStream(exportedFile);
// if file doesn't exists, then create it
if (!exportedFile.exists()) {
exportedFile.createNewFile();
}
} catch (Exception e) {
throw new RuntimeException("Init failed. File " + exportedFile.getName() + " cannot be found");
}
switch (exportType) {
case MS_EXCEL_2007_AND_UP_STREAMING:
wb = new SXSSFWorkbook();
break;
default:
throw new RuntimeException("Unsupported export type");
}
wb.setMissingCellPolicy(Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
creationHelper = wb.getCreationHelper();
sheet = wb.createSheet(getSheetName());
Font font = wb.createFont();
font.setFontName(DEFAULT_FONT_NAME);
if(sheet instanceof SXSSFSheet) {
((SXSSFSheet) sheet).trackAllColumnsForAutoSizing();
}
format = wb.createDataFormat();
headerFont = wb.createFont();
headerFont.setFontName(DEFAULT_FONT_NAME);
headerFont.setBold(true);
cellFont = wb.createFont();
cellFont.setFontName(DEFAULT_FONT_NAME);
}
public File export() {
double factor = 390;
for (int i = 0; i < numOfColumns; i++) {
sheet.autoSizeColumn(i);
sheet.setColumnWidth(i, getWidth((int)(maxColumnWidth.get(i) * factor)));
}
sheet.createFreezePane(0,1);
try {
wb.write(fileOutputStream);
fileOutputStream.close();
wb.close();
} catch (IOException e) {
e.printStackTrace();
}
return exportedFile;
}
根据链接https://xalan.apache.org/xalan-j/
Xalan-JavaVersion 2. 7. 3与Xerces-Java一起工作,该发行版包括Xerces-Java 2. 12. 2中的xercesImpl.jar。
Xalan-Java实现在xalan.jar和serializer.jar中。SAX、DOM和JAXP1.3接口位于xml-apis.jar中。
所以也许我需要以不同的方式实现代码?有什么办法可以解决这个问题吗?
1条答案
按热度按时间vd8tlhqk1#
通过将此添加到我的maven依赖项来修复