前言:一开始用XSSFWorkbook实现读写xlsx后缀的excel文件,文件导出是完全没有问题的,后来需求变了,需要根据前台选择导出格式(xls或xlsx)来动态导出对应后缀的excel文件。
过程:1、一开始通过格式入参试图根据改变文件名的后缀来达到这个目的,结果导出xls文件的时候,还是报了文件格式不符合的打开错误
2、根据导出格式的入参,分别用XSSFWorkbook、HSSFWorkbook来写两次不同的导出逻辑,这种方法是可以的但是过于复杂。
结果:后面统一用了Workbook实现导出方法。既支持xls也支持xlsx
格式的excel;需要注意的是Workbook(子类:HSSFWorkbook – xls格式、XSSFWorkbook – xlsX格式)以及其方法RichTextString(HSSFRichTextString – xls格式、 XSSFRichTextString – xlsX格式)都是抽象接口,不能直接new,必须根据导出格式选择对应的子类创建对象
代码部分示例:
//exportMode:导出格式入参
//Workbook 的创建
Workbook wb = this.getWorkbook(exportMode);
//单元格的创建
Cell cell = row.createCell(1);
cell.setCellValue(this.getRichTextString(exportMode, sheetName));
cell.setCellStyle(headStyle);
/**
* 根据选择的导出格式生成对应的富文本
*/
public RichTextString getRichTextString(String exportMode,String memo){
//0:xls格式 1:xlsx格式
if (Const.CNST_STR_FALSE.equals(exportMode)) {
return new HSSFRichTextString(memo);
} else {
return new XSSFRichTextString(memo);
}
}
/**
* 根据选择的导出格式生成对应的Workbook
*/
public Workbook getWorkbook(String exportMode){
//0:xls格式 1:xlsx格式
if ("0".equals(exportMode)) {
return new HSSFWorkbook();
} else {
return new XSSFWorkbook();
}
}
备注:xls和xlsx对象的区别
xls格式: HSSFWorkbook HSSFDataFormat HSSFSheet HSSFRow HSSFCell HSSFCellStyle HSSFFont HSSFRichTextString
xlsX格式:XSSFWorkbook XSSFDataFormat XSSFSheet XSSFRow XSSFCell XSSFCellStyle XSSFFont XSSFRichTextString
通用格式: Workbook DataFormat Sheet Row Cell CellStyle Font RichTextString
Workbook RichTextString 抽象接口,不能直接new,必须根据格式选择对应的子类创建对象
版权声明:本文为weixin_43779185原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。