欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java多sheet页导出Excel

程序员文章站 2022-07-13 12:58:39
...

前言

之前导出一直用的是EasyPoi,但这次有个需求是需要导出多sheet页的一个Excel,在EasyPoi没有找到所以自己用了一些资料加自己整合了一下,先看一下导出样式java多sheet页导出Excel

导出的Excel里面的格式字体什么请自行百度

正文

代码里面写了详细的注解,请看代码

/**
 * @description: 导出演示 使用这个demo只需要吧红色的部分替换成你的数据就好了
 * @author: 秉笙
 * @time: 2020/3/30 14:28
 */
@Controller
@RequestMapping("dataExport")
@Api(tags = {"人员信息导出【蒋秉笙】"})
public class PersommelController {
    @ApiOperation(value = "人员信息导出【蒋秉笙】", notes = "列表导出", httpMethod = "get")
    @GetMapping("/personnel")
    public void downloadHouseList(HttpServletRequest request, HttpServletResponse response,
                                  @RequestParam("identitycard") String identitycard) {
        //你要导出的数据Object
        List<PersonnelBasicInformationDTO> basicInformationDTOList = new ArrayList<>();
        //另外一个需要导出的object(这里只有一条数据我没有使用List)
        PersonnelHealthRecordDTO healthRecordDTO = new PersonnelHealthRecordDTO();
        try {
            //personnelService是我注解进来的一个Service(这一步就是获取了数据结果集)
            basicInformationDTO = personnelService.getBasicInformationDTO();
            healthRecordDTO = healthService.getHealthRecordDTO();
            //数据
            List<String[]> dataset1 = new ArrayList<String[]>();
            for (int i = 0; i < basicInformationDTOList.size(); i++) {
                String[] arr1 = new String[2];//有几列就写几
                //如果数据不为空则赋值(这里就是循环每行的数据)
                arr1[0] = basicInformationDTOList.get(i).getClbz0001()==null ? "" : basicInformationDTOList.get(i).getClbz0001().toString();
                arr1[1] = basicInformationDTOList.get(i).getClbz0003()==null ? "" : basicInformationDTOList.get(i).getClbz0003().toString();
                dataset1.add(arr1);
            }
            List<String[]> dataset2 = new ArrayList<String[]>();
            String[] arr2 = new String[2];
            arr2[0] = healthRecordDTO.getCxac0001()==null ? "" : healthRecordDTO.getCxac0001().toString();
            arr2[1] = healthRecordDTO.getCxac0008()==null ? "" : healthRecordDTO.getCxac0008().toString();
            dataset2.add(arr2);
            //为了演示简单点,这个地方就是表头
            String[] handers1 = {"姓名","曾用名"};
            String[] handers2 = {"姓名","血型"};
            //然后需要把你的数据对象放进来
            ExcelExp e1 = new ExcelExp("基本信息", handers1, dataset1);
            ExcelExp e2 = new ExcelExp("健康档案", handers2, dataset2);
            List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
            mysheet.add(e1);
            mysheet.add(e2);
            //fileName是你导出的文件名
            String fileName = "人员信息";
            //ExcelExportUtil是你设置Excel和下载控制的地方
            ExcelExportUtil.exportManySheetExcel(fileName,mysheet,response); //生成sheet
        }catch (Exception e){

        }

    }
}

里面使用的ExcelExp类

/**
 * @description:
 * @author: 秉笙
 * @time: 2020/3/25 17:07
 */
@Data
public class ExcelExp {
    private String fileName;// sheet的名称
    private String[] handers;// sheet里的标题
    private List<String[]> dataset;// sheet里的数据集

    public ExcelExp(String fileName, String[] handers, List<String[]> dataset) {
        this.fileName = fileName;
        this.handers = handers;
        this.dataset = dataset;
    }
}

设置样式和下载控制的类ExcelExportUtil

/**
 * @description:
 * @author: 秉笙
 * @time: 2020/3/25 17:16
 */
public class ExcelExportUtil {
    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
            HSSFSheet sheet = wb.createSheet(excel.getFileName());//获取该sheet名称
            String[] handers = excel.getHanders();//获取sheet的标题名
            HSSFRow rowFirst = sheet.createRow(0);//第一个sheet的第一行为标题
            //写标题
            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();
        }
    }
}

 

相关标签: 中间件 java