Java POI 导出excel ,多表头excel

项目导出excel功能,在特定的项目中应该是很常见的。 本人也因需要使用,所以这两天就研究了一下,并做个记录。

        这里先简单介绍一下导出excel的几种方法,如我标题所说,poi导出excel,所以这里不会讲和poi无关的其他API的实现,并且我也不会。综合这两天看的文章,poi导出excel有两种方式:

 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加样式,数据等。

第二种:通过excel.xls 模板的方式,自己在桌面创建一个excel, 然后修改这个excel为模板,复制到项目中(我是放在根目录下),再然后读取模板,修改模板,给模板填充数据,最后把模板写入到另外一个excel2.xls中(硬盘中的)。 按我自己的理解,这种方式只适合,需要导出的内容是固定格式的,只需要填充一次数据的 情况。比如简历。

本文内容如下:

        1. 使用 HSSFWorkbook 对象 实现excel导出。一般是导出excel2003

        2. 使用 XSSFWorkbook 对象实现excel导出。 一般是导出excel2007

        3. 使用 SXSSFWorkbook 对象实现excel导出。 一般是导出百万级数据的excel

        4. 使用 template.xls 格式模板,实现excel导出。 一般是导出有固定字段的excel

        5. 多表头excel导出。

提醒:如果不知道这些poi里的类的可以看他的api,都是英文,看不懂,我用的百度翻译,了解一下。

一,

二,

三,

四,使用 template.xls 格式模板

    使用模板的最大好处是不用去关系样式问题, 你完全可以直接操作excel,模板中已经包含了样式,我们只需要填充数据即可。值得一提的是,你模板中的表达式的样式会延续给修改后的excel文件。 以下是代码:

我的模板位置:



我的模板格式:

       

 实现代码:

public class ExportExcelTemplate {
    /**
     * @throws Exception
     *
     *   根据模板导出excel,  这种方法是 通过给模板中指定的位置赋值,然后重新生成excel,来导出excel的,
     *    而且不会修改模板本身。
     *    感觉不太合适去导出有大量数据的excel。
     *    POIFSFileSystem: poi里面的类,
     *    可以把Excel文件作为数据流来进行传入传出。这里介绍下POIFSFileSystem类,这个类是专门用来读取excel表格的。
     *
     */
    public void exportXls() throws Exception {
        // 读取项目根目录中的模板
        InputStream in = this.getClass().getResourceAsStream("/templates/template.xls");

//        File file = new File("E:\\template.xls");   电脑硬盘上的模板,,一般模板都在项目里
        POIFSFileSystem poifsFileSystem = new POIFSFileSystem(in);
        HSSFWorkbook workbook = new HSSFWorkbook(poifsFileSystem);
        HSSFSheet sheet = workbook.getSheetAt(0);
        sheet.setForceFormulaRecalculation(true);

        // 根据模板中表达式位置, 修改对应单元格的值
        HSSFCell cell = sheet.getRow(2).getCell(0);//第3行 第1列, 下标是0开始的
        cell.setCellValue("张三");
        HSSFCell cell2 = sheet.getRow(2).getCell(1);
        cell2.setCellValue(23);
        sheet.getRow(2).getCell(2).setCellValue("180cm");
        sheet.getRow(2).getCell(3).setCellValue("未婚");
        sheet.getRow(2).getCell(4).setCellValue("男");
        //修改模板内容导出新模板
        // '/' 分隔符 采用 File.separator 统一表示
        FileOutputStream out = new FileOutputStream("E:"+File.separator+"export.xls");
        workbook.write(out);
        out.close();
    }

    public static void main(String[] args) throws Exception {
        new ExportExcelTemplate().exportXls();

    }
}

结果:



其他的几个类型,可以参考下面的博文。

参考文档:

        https://www.cnblogs.com/xuyuanjia/p/5886056.html

        https://blog.csdn.net/evangel_z/article/details/7332535

        https://blog.csdn.net/happyljw/article/details/52809244






猜你喜欢

转载自blog.csdn.net/qq_41694349/article/details/81000746