【JAVA-POI】自定义动态表头EXCEL导出

【JAVA-POI】自定义动态表头EXCEL导出

需求:根据前端页面勾选的表头信息导出相应的字段信息列表
在这里插入图片描述

后端代码

相关实体类

public class EmpBasicExcelVo{
	//名称
	private String name;
	//身份证号码
    private String idCard;
    //id (id1,id2,id3)多选导出
    private String ids;
    //.........其他查询参数
	//表头列表
	private  List<CustomFieldVo> customFieldVoList;
}

/**
 * 自定义表头实体类
 */
public class CustomFieldVo {

    /**
     * 字段
     */
    private String field;
    /*
    * 字段名称
    * */
    private String fieldName;
}

导出方法

    /**
     * 
     * @param response
     * @param customFieldVoList 自定义表头数据
     * @param empMapInfo 导出结果数据 
     * @param fileName 文件名称
     */
 public void exportCustomExcel(HttpServletResponse response,List<CustomFieldVo> customFieldVoList,List<Map<String, Object>> empMapInfo,String fileName){
        Workbook workbook = new XSSFWorkbook();
        //创建sheet
        Sheet sheet = workbook.createSheet("人员信息");
        Row headerRow = sheet.createRow(0);
        //填充自定义表头名称
        for (int colNum = 0;colNum < customFieldVoList.size();colNum++){
            Cell cell = headerRow.createCell(colNum);
            cell.setCellValue(customFieldVoList.get(colNum).getFieldName());
        }
        //填充数据
        int rowNum=1;
        for (Map<String, Object> stringObjectMap : empMapInfo) {
        	//创建表格行
            Row row = sheet.createRow(rowNum++);
            for (int colNum = 0;colNum < customFieldVoList.size();colNum++){
            	//创建单元格
                Cell cell = row.createCell(colNum);
                //根据自定义表头获取到字段名(数据库字段)
                String field = customFieldVoList.get(colNum).getField();
                if (isNotNull(stringObjectMap.get(field))){
                	//根据字段名(数据库字段)获取到数据并填充至单元格
                    cell.setCellValue(stringObjectMap.get(field).toString());
                }else {
                	//如果查询的数据中没有字段则设置空值
                    cell.setCellValue("");
                }
            }
        }
        OutputStream outputStream = null;
        try{
            outputStream = response.getOutputStream();
            response.reset();
            fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
            // 设定输出文件头
            response.setHeader("Content-disposition", "attachment; filename=" + fileName);
            // 定义输出类型
            response.setContentType("application/msexcel");
            workbook.write(outputStream);
        }catch (Exception e){
            throw new ServiceException("人员信息导出失败");
        }finally {
            try{
                if (outputStream != null){
                    outputStream.flush();
                    outputStream.close();
                }
            }catch (Exception e){

            }
        }
    }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现动态表头导出,你需要先确定表头的数据和结构,然后使用 POI 库动态生成表头和数据。 以下是实现动态表头导出的基本步骤: 1. 创建工作簿对象 XSSFWorkbook。 ```java XSSFWorkbook workbook = new XSSFWorkbook(); ``` 2. 创建工作表对象 XSSFSheet。 ```java XSSFSheet sheet = workbook.createSheet("Sheet1"); ``` 3. 创建表头行对象 XSSFRow。 ```java XSSFRow headerRow = sheet.createRow(0); ``` 4. 创建表头单元格对象 XSSFCell。 ```java XSSFCell headerCell = headerRow.createCell(0); ``` 5. 设置表头单元格的值和样式。 ```java headerCell.setCellValue("表头1"); XSSFCellStyle headerCellStyle = workbook.createCellStyle(); headerCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerCellStyle.setAlignment(HorizontalAlignment.CENTER); headerCell.setCellStyle(headerCellStyle); ``` 6. 动态生成表头和数据。 ```java // 假设表头和数据都保存在一个 Map 对象中 Map<String, List<String>> dataMap = new HashMap<>(); // 生成表头 int columnIndex = 0; for (String header : dataMap.keySet()) { XSSFCell headerCell = headerRow.createCell(columnIndex++); headerCell.setCellValue(header); XSSFCellStyle headerCellStyle = workbook.createCellStyle(); headerCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerCellStyle.setAlignment(HorizontalAlignment.CENTER); headerCell.setCellStyle(headerCellStyle); } // 生成数据 int rowIndex = 1; for (List<String> dataList : dataMap.values()) { XSSFRow dataRow = sheet.createRow(rowIndex++); columnIndex = 0; for (String data : dataList) { XSSFCell dataCell = dataRow.createCell(columnIndex++); dataCell.setCellValue(data); } } ``` 7. 导出 Excel 文件。 ```java try (FileOutputStream outputStream = new FileOutputStream("data.xlsx")) { workbook.write(outputStream); } ``` 以上就是实现动态表头导出的基本步骤。你可以根据自己的需求自定义表头和数据的生成逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值