Administrator
发布于 2024-07-04 / 3 阅读
0
0

EasyExcel Best Practise

EasyExcel Best Practise

refer to : https://easyexcel.opensource.alibaba.com/docs/current/

通过ColumnWidthStyleStrategy,设置列宽

package com.jshxhb.module.detectcontrol.biz.service;

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.style.column.AbstractHeadColumnWidthStyleStrategy;

public class DetectIndexHisdataColumnWidthStyleStrategy extends AbstractHeadColumnWidthStyleStrategy {
    @Override
    protected Integer columnWidth(Head head, Integer columnIndex) {
        if (columnIndex == 0) {
            return 30;
        }else {
            return 20;
        }
    }
}



接下来,通过registerWriteHandler的方式,将上面自定义的ColumnWidthStyleStrategy,注册进来,启用这个ColumnWidthStyleStrategy


 DetectIndexHisdataColumnWidthStyleStrategy columnWidthStyleStrategy = new DetectIndexHisdataColumnWidthStyleStrategy();

        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).head(headList)
                .registerWriteHandler(horizontalCellStyleStrategy)
                .registerWriteHandler(columnWidthStyleStrategy).build()) {
                //....
                ...
                
                }
                

通过CellStyleStrategy,设置单元格的格式为文本,并且居中

private HorizontalCellStyleStrategy getHorizontalCellStyleStrategy() {
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        DataFormatData dataFormatData = new DataFormatData();
        dataFormatData.setIndex((short) 49); // com.alibaba.excel.constant.BuiltinFormats
        contentWriteCellStyle.setDataFormatData(dataFormatData);

        HorizontalCellStyleStrategy horizontalCellStyleStrategy =
                new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
        return horizontalCellStyleStrategy;
    }


接下来,通过registerWriteHandler的方式,将上面HorizontalCellStyleStrategy,注册进来,启用这个CellStyleStrategy

HorizontalCellStyleStrategy horizontalCellStyleStrategy = getHorizontalCellStyleStrategy();



 DetectIndexHisdataColumnWidthStyleStrategy columnWidthStyleStrategy = new DetectIndexHisdataColumnWidthStyleStrategy();

        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).head(headList)
                .registerWriteHandler(horizontalCellStyleStrategy)
                .registerWriteHandler(columnWidthStyleStrategy).build()) {
                //....
                ...
                
                }
                

上面有一段代码:

WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
DataFormatData dataFormatData = new DataFormatData();
dataFormatData.setIndex((short) 49); // com.alibaba.excel.constant.BuiltinFormats
contentWriteCellStyle.setDataFormatData(dataFormatData);

DataFormatData类,是干什么用的呢?

其实,就是描述,这个单元格,记录的是文本、还是数字、或者日期、或者是其他的等等,

如下面excel展示的:

image-20240704161333495


其中49,表示的就是文本,这个是来自于com.alibaba.excel.constant.BuiltinFormats类中的描述


image-20240704161715229


评论