二 Java之POI导出Excel:多个sheet

相信在大部分的web项目中都会有导出导入Excel的需求,之前我也写过一篇导出单个sheet工作表的文章,没看过的小伙伴可以去看哈,链接也给大家放出来了:导出单个sheet
但是在我们日常的工作中,需求往往没这么简单,可能需要将数据按类型分类导出或者数据量过大,需要分多张表导出等等 。遇到类似的需求该怎么办呢,别慌,往下看 。


一、pom引用pom文件中,添加以下依赖

查看代码        <!--Excel工具-->        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>5.2.2</version>            <scope>compile</scope>        </dependency>        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi-ooxml</artifactId>            <version>5.2.2</version>            <scope>compile</scope>        </dependency>
二、工具类util1.ExportSheetUtil
查看代码 package com.***.excel;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.ss.usermodel.HorizontalAlignment;import org.apache.poi.ss.usermodel.VerticalAlignment;import org.springframework.http.MediaType;import javax.servlet.http.HttpServletResponse;import java.net.URLEncoder;import java.util.List;/** * @description: excel导出多个sheet工具类 * @author: *** * @date: 2022/9/15 */public class ExportSheetUtil {    /**     * 拆解并导出多重Excel     */    public static void exportManySheetExcel(String fileName, List<ExcelSheet> mysheets, HttpServletResponse response) {        //创建工作薄        HSSFWorkbook wb = new HSSFWorkbook();        //表头样式        HSSFCellStyle style = wb.createCellStyle();        // 垂直        style.setVerticalAlignment(VerticalAlignment.CENTER);        // 水平        style.setAlignment(HorizontalAlignment.CENTER);        //字体样式        HSSFFont fontStyle = wb.createFont();        fontStyle.setFontName("微软雅黑");        fontStyle.setFontHeightInPoints((short) 12);        style.setFont(fontStyle);        for (ExcelSheet excel : mysheets) {            //新建一个sheet            //获取该sheet名称            HSSFSheet sheet = wb.createSheet(excel.getFileName());            //获取sheet的标题名            String[] handers = excel.getHanders();            //第一个sheet的第一行为标题            HSSFRow rowFirst = sheet.createRow(0);            //写标题            for (int i = 0; i < handers.length; i++) {                //获取第一行的每个单元格                HSSFCell cell = rowFirst.createCell(i);                //往单元格里写数据                cell.setCellValue(handers[i]);                //加样式                cell.setCellStyle(style);                //设置每列的列宽                sheet.setColumnWidth(i, 4000);            }            //写数据集            List<String[]> dataset = excel.getDataset();            for (int i = 0; i < dataset.size(); i++) {                //获取该对象                String[] data = dataset.get(i);                //创建数据行                HSSFRow row = sheet.createRow(i + 1);                for (int j = 0; j < data.length; j++) {                    //设置对应单元格的值                    row.createCell(j).setCellValue(data[j]);                }            }        }        // 下载文件谷歌文件名会乱码,用IE        try {            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8"));            response.setHeader("Cache-Control", "No-cache");            response.flushBuffer();            wb.write(response.getOutputStream());            wb.close();        } catch (Exception e) {            e.printStackTrace();        }    }}

推荐阅读