java导出xls和xlsx的区别点

前言:一开始用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版权协议,转载请附上原文出处链接和本声明。