Java使用POI完成导出多sheet版的Excel

导出样式

#注:本文所用方式最早是根据网上一个大神朋友创作的文章改进来到自己项目里使用的,不过目前找不到这位朋友的文章了,固无法引用一下源链接,抱歉!

1.根据任务需要,导出一份有关企业的Excel数据,而且要通过多sheet页面来完成。

在这里插入图片描述

在这里插入图片描述

创建相应工具类完成多sheet导出
1. 创建一个ExcelExp类,来保存每个sheet也得表头和数据
package com.hxlh.common.utils.poi;

import java.util.List;

@Data
public class ExcelExp {
    // sheet的名称
    private String fileName;
    // sheet里的标题
    private String[] handers;
    // sheet里的数据集
    private List<String[]> dataset;

    public ExcelExp(String fileName, String[] handers, List<String[]> dataset) {
        this.fileName = fileName;
        this.handers = handers;
        this.dataset = dataset;
    }
}
2. 创建ExcelExportUtil类用来制作样式和解析导出包含多ExcelExp的数据集
package com.hxlh.common.utils.poi;

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;

/**
 * 导出规定格式的多重sheet的Excel
 */
public class ExcelExportUtil {



    /**
     * 拆解并导出多重Excel
     */
    public static void exportManySheetExcel(String fileName, List<ExcelExp> mysheets, HttpServletResponse response){
        //创建工作薄
        HSSFWorkbook wb = new HSSFWorkbook();
        List<ExcelExp> sheets = mysheets;
        //表头样式
        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(ExcelExp excel: sheets){
            //新建一个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 {
            HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "utf-8"));
            response.setHeader("Cache-Control", "No-cache");
            response.flushBuffer();
            wb.write(response.getOutputStream());
            wb.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
整合数据,调用工具导出方法

这里需要准备三组数据,每个sheet的表头、sheet名称、表内容。然后将他们打包到 ExcelExp类中存入 List<ExcelExp>中,之后调用exportManySheetExcel方法进行导出

示例


@Controller
@RequestMapping("/export")
public class ExcelExportController {
    @GetMapping("/ExcelOfSheet")
    public void ExcelOfSheet(HttpServletResponse response) {
        //准备各个sheet数据(这里为演示设置为空)
        List<String[]> dataQyxxList = new ArrayList<>();
        List<String[]> dataQyscxxList = new ArrayList<>();
        try {
            //数据1
            List<String[]> dataset1 = new ArrayList<String[]>();
            for (int i = 0; i < dataQyxxList .size(); i++) {
                String[] arr1 = new String[2];//有几列就写几
                //如果数据不为空则赋值(这里就是循环每行的数据)
                arr1[0] = dataQyxxList .get(i).getQymc()==null ? "" : dataQyxxList .get(i).getQymc().toString();
                arr1[1] = dataQyxxList .get(i).getTyshxydm()==null ? "" : dataQyxxList .get(i).getTyshxydm().toString();
                dataset1.add(arr1);
            }
            //数据2
            List<String[]> dataset2 = new ArrayList<String[]>();
            for (int i = 0; i < dataQyscxxList .size(); i++) {
                String[] arr1 = new String[2];//有几列就写几
                //如果数据不为空则赋值(这里就是循环每行的数据)
                arr1[0] = dataQyscxxList .get(i).getJzmc()==null ? "" : dataQyscxxList .get(i).getJzmc().toString();
                arr1[1] = dataQyscxxList .get(i).getRllx()==null ? "" : dataQyscxxList .get(i).getTyshxydm().toString();
                dataset1.add(arr1);
            }
            dataset2.add(arr2);
            //设置sheet的表头与表名
            ExcelExp qyxxExp = new ExcelExp("企业信息", {"企业名称","统一社会信用代码"},dataset1);
        		 ExcelExp qyscxxExp = new ExcelExp("企业生产信息", {"机组名称","燃料类型"},dataset2);
            List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
            mysheet.add(qyxxExp );
            mysheet.add(qyscxxExp );
            //fileName是你导出的文件名
            String fileName = "企业信息";
            //ExcelExportUtil是你设置Excel和下载控制的地方
            ExcelExportUtil.exportManySheetExcel(fileName,mysheet,response); //生成sheet
        }catch (Exception e){
 				
        }
 
    }
}
完成!

喜欢的同学给个免费的点赞吧,Thanks♪(・ω・)ノ

  • 11
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值