easyExcel导出excel文件,设置单元格样式和字体样式

本文介绍了如何在Java中利用EasyExcel库为导出的Excel文件设置独特的样式,包括单元格背景颜色、字体颜色以及支持单个单元格的多种样式。作者还提到了在处理颜色时的注意事项和相关库的使用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候,要对导出的excel文件设定独特的样式,或是为了美观,或是为了显眼.那么,如何设置样式呢?

实体类

 
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.Data;
 
@Data
@HeadRowHeight(30)
//属性注释在最下
@ContentStyle(wrapped = BooleanEnum.TRUE, verticalAlignment = VerticalAlignmentEnum.CENTER, borderBottom = BorderStyleEnum.THIN, borderLeft = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN)
public class ExportHeadersLinkExcel {
 
    /**
     * 金
     */
    @ExcelProperty(value = {"七灵图","五行", "金"})
    private String jin;
    /**
     * 木
     */
    @ExcelProperty(value = {"七灵图","五行", "木"})
    private String mu;
    /**
     * 水
     */
    @ExcelProperty(value = {"七灵图","五行", "水"})
    private String shui;
    /**
     * 火
     */
    @ExcelProperty(value = {"七灵图","五行", "火"})
    private String huo;
    /**
     * 土
     */
    @ExcelProperty(value = {"七灵图","五行", "土"})
    private String tu;
    /**
     * 阴
     */
    @ExcelProperty(value = {"七灵图","两仪", "阴"})
    private String yin;
    /**
     * 阳
     */
    @ExcelProperty(value = {"七灵图","两仪", "阳"})
    private String yang;
    /**
     * 超链接
     *
     */
    private WriteCellData<String> hyperlink;
 
    /**
     * 备注
     *
     */
    private WriteCellData<String> commentData;
 
    /**
     * 公式
     *
     */
    private WriteCellData<String> formulaData;
 
    /**
     * 指定单元格的样式。当然样式 也可以用注解等方式。
     *
     */
    private WriteCellData<String> writeCellStyle;
 
    /**
     * 指定一个单元格有多个样式
     *
     */
    private WriteCellData<String> richText;
}

代码

public void exportHeadersValueStyle(String path) {
 
        String sheetName = "sheetName";
        ExportHeadersLinkExcel excel = new ExportHeadersLinkExcel();
        excel.setJin("10");
        excel.setMu("2.00");
        excel.setShui("3.00");
        excel.setHuo("4.00");
        excel.setTu("5.00");
        excel.setYin("6.00");
        excel.setYang("7.01");
 
        // 设置单个单元格的样式 当然样式 很多的话 也可以用注解等方式。
        WriteCellData<String> writeCellStyle = new WriteCellData<>("单元格样式");
        WriteCellStyle writeCellStyleData = new WriteCellStyle();
        // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.
        writeCellStyleData.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        // 背景绿色
        writeCellStyleData.setFillForegroundColor(IndexedColors.GREEN.getIndex());
        writeCellStyle.setWriteCellStyle(writeCellStyleData);
        writeCellStyle.setType(CellDataTypeEnum.STRING);
        excel.setWriteCellStyle(writeCellStyle);
 
        // 设置单个单元格多种样式
        // 这里需要设置 inMomery=true 不然会导致无法展示单个单元格多种样式,所以慎用
        WriteCellData<String> richTest = new WriteCellData<>();
        RichTextStringData richTextStringData = new RichTextStringData();
        richTextStringData.setTextString("红色绿色默认");
        // 前2个字红色
        WriteFont writeFont = new WriteFont();
        writeFont.setColor(IndexedColors.RED.getIndex());
        richTextStringData.applyFont(0, 2, writeFont);
        // 接下来2个字绿色
        writeFont = new WriteFont();
        writeFont.setColor(IndexedColors.GREEN.getIndex());
        richTextStringData.applyFont(2, 4, writeFont);
        richTest.setRichTextStringDataValue(richTextStringData);
        richTest.setType(CellDataTypeEnum.RICH_TEXT_STRING);
 
        excel.setRichText(richTest);
 
        List<ExportHeadersLinkExcel> excels = new ArrayList<>();
        excels.add(excel);
        EasyExcel.write(path, ExportHeadersLinkExcel.class)
                .inMemory(true)
                .sheet(sheetName)
                .doWrite(excels);
    }

一个单元格多种样式需要启用内存.

在设置单元格背景或字体的颜色的时候,颜色会对应一个short类型的数据,下面是具体对应关系

 git仓库:导入导出: 导入导出的实例

更多导出场景:多场景easyExcel导出excel文件(一)-优快云博客

读取excel场景:多场景easyExcel读取excel文件(二)-优快云博客

根据模板填充excel:多场景easyExcel根据模板填充excel文件(三)-优快云博客

### 如何在 EasyExcel设置导出 Excel 文件时的字体颜色 为了实现在 EasyExcel 导出过程中动态调整单元格内文字的颜色,可以利用 `@ConditionalFormatting` 注解以及自定义样式处理器。对于特定条件下的字体颜色变化,通常会结合业务逻辑,在写入数据前预先处理好所需格式。 当需要基于某些字段值改变字体颜色时,可以通过继承 `AbstractHorizontalCellStyleStrategy` 或者使用 `WriteHandler` 接口来自定义写操作中的样式应用行为[^3]。下面是一个简单的例子展示如何根据有效期这一整型字段的不同取值范围来设定不同的字体颜色: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.handler.AbstractCellWriteHandler; import org.apache.poi.ss.usermodel.*; import java.util.List; public class ColorFontExample { public static void main(String[] args) { String fileName = "example_color_font.xlsx"; // 假设这里有一个列表存储着待导出的数据对象 List<ExportData> dataList = ... ; EasyExcel.write(fileName, ExportData.class).registerWriteHandler(new CustomColorFontHandler()).sheet("Sheet1").doWrite(dataList); } } // 自定义写处理器用于控制字体颜色 class CustomColorFontHandler extends AbstractCellWriteHandler { @Override protected void afterCellDispose(WriteSheetHolder writeSheetHolder, List<CellRangeAddress> cellRangeAddresses, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { if (!isHead && cell.getColumnIndex() == 有效期限所在列索引位置){ int value = (int)cell.getNumericCellValue(); Font font = writeSheetHolder.getSheet().getWorkbook().createFont(); switch(value){ case 小于某个阈值: font.setColor(IndexedColors.RED.index); break; // 设置红色 default: font.setColor(IndexedColors.BLACK.index); // 默认黑色 } CellStyle style = writeSheetHolder.getSheet().getWorkbook().createCellStyle(); style.setFont(font); cell.setCellStyle(style); } } } ``` 在这个案例里,通过创建一个实现了 `AbstractCellWriteHandler` 的类,并重写了其方法以适应具体的业务需求——即根据不同情况给定不同颜色。注意这里的 `有效期限所在列索引位置` `小于某个阈值` 需要替换为实际项目里的对应参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值