easyExcel导出设置标题头

方法实现:通过继承接口实现EasyExcel的registerWriteHandler方法实现自定义样式,表头和内容都适用,这里只有表头代码
package cn.xwl.easyexcel.dto;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

import java.io.Serializable;

@Data
public class User  implements Serializable {

    private static final long serialVersionUID = 1602341773222025686L;

    @ExcelProperty(index = 0, value = {"姓名"})
    private String name;

    @ExcelProperty(index = 1, value = {"年龄"})
    private Integer age;

    @ExcelProperty(index = 2, value = {"家庭地址"})
    private String address;





}

  controller

@GetMapping("/download")
public void importPrisonerDownload(HttpServletResponse response) throws Exception {
    try{
        String fileName = URLEncoder.encode("用户信息", "UTF-8").replaceAll("\\+", "%20");
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");//设置响应头
        response.setHeader("mime","application/vnd.ms-excel");
        List<User> lst =  new ArrayList<>();//空数组作为导入模板 可以再写一个方法给数组赋值作为导出模板

        //表头字体颜色map 1为user中索引位置
        Map<Integer,Short> colorMap=new HashMap<>();
        colorMap.put(1, IndexedColors.BLUE.index);

        EasyExcel.write(response.getOutputStream(), User.class)
                .registerWriteHandler(new XCellStyle(colorMap))
                .sheet("User")
                .doWrite(lst);
    }catch (Exception e){
        e.printStackTrace();
    }
}

  工具类

package cn.xwl.easyexcel.util;

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.AbstractVerticalCellStyleStrategy;
import org.apache.poi.ss.usermodel.IndexedColors;

import java.util.HashMap;
import java.util.Map;

/*
  EasyExcel 表格样式工具类
*/
public class XCellStyle extends AbstractVerticalCellStyleStrategy {

    //key为ExcelProperty value为颜色
    public Map<Integer,Short> colorMap=new HashMap<>();

    public XCellStyle(Map<Integer,Short> colorMap){
        this.colorMap=colorMap;
    }

    //表格头样式
    @Override
    protected WriteCellStyle headCellStyle(Head head) {
        WriteCellStyle writeCellStyle=new WriteCellStyle();
        WriteFont font=new WriteFont();

        //自定义字体颜色
        for(Integer key:colorMap.keySet()){
            if(head.getColumnIndex()==key){
                font.setColor(colorMap.get(key));
                break;
            }else {
                font.setColor(IndexedColors.BLACK.index);//默认颜色
            }
        }

        //有兴趣可以自己定义别的这里只定义了color

        writeCellStyle.setWriteFont(font);
        return writeCellStyle;
    }


    //单元格格内样式 写法与上面类似
    @Override
    protected WriteCellStyle contentCellStyle(Head head) {
        return null;
    }
}

  原文地址 https://deepmind.t-salon.cc/article/5799

posted @ 2023-03-01 15:20  红尘沙漏  阅读(1745)  评论(0编辑  收藏  举报