一、设置整个单元格的背景颜色
EasyExcel是一个开源的基于Java的Excel读写解决方案,我们可以通过它的API来设置Excel的单元格的样式。要设置整个单元格的背景颜色,我们需要执行以下几个步骤:
1、创建一个ExcelWriter对象
2、设置单元格背景样式
3、写入Excel文件
public static void main(String[] args) { //创建一个直接写入文件的excel对象 String fileName = "D:/test.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); //设置样式 WriteCellStyle writeCellStyle = new WriteCellStyle(); //设置背景颜色 writeCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); //设置填充模式 writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); //写入Sheet1 WriteSheet writeSheet = EasyExcel.writerSheet(0, "Sheet1") .head(head()) .registerWriteHandler(new CellFillStyleWriteHandler(writeCellStyle))//设置样式 .build(); excelWriter.write(data(), writeSheet); excelWriter.finish(); } public static List
> head() {...} public static List
> data() {...}
二、设置单元格内文字和背景颜色
有时,我们需要对单元格内的文字进行样式设置,比如设置文字的颜色和背景颜色。此时,我们需要给每一个单元格设置样式,并设置文字与单元格背景之间的边距:
1、创建一个ExcelWriter对象
2、设置单元格样式
3、遍历单元格,设置每个单元格的样式
4、写入Excel文件
public static void main(String[] args) { //创建一个直接写入文件的excel对象 String fileName = "D:/test.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); //设置样式 WriteCellStyle writeCellStyle = new WriteCellStyle(); //设置背景颜色 writeCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); //设置填充模式 writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); //设置文字颜色 writeCellStyle.setWriteFontColor(IndexedColors.WHITE.getIndex()); //设置上下左右边距 writeCellStyle.setTopBorderColor(IndexedColors.WHITE.getIndex()); writeCellStyle.setBottomBorderColor(IndexedColors.WHITE.getIndex()); writeCellStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex()); writeCellStyle.setRightBorderColor(IndexedColors.WHITE.getIndex()); //写入Sheet1 WriteSheet writeSheet = EasyExcel.writerSheet(0, "Sheet1") .head(head()) .registerWriteHandler(new CellFillStyleWriteHandler(writeCellStyle))//设置样式 .build(); excelWriter.write(data(), writeSheet); //遍历单元格,设置样式 for (int i = 0; i < data().size(); i++) { excelWriter.writeRow(new WriteSheetHolder(writeSheet), new WriteTableHolder(new TableWriteHandler.ExcelWriteTableParameter(i, 1, data().size()), null, null), data().get(i)); //设置单元格样式 excelWriter.getOrCreateCellWriteHandler(new CellFillStyleWriteHandler(writeCellStyle)).cell(i, 1); } excelWriter.finish(); } public static List
> head() {...} public static List
> data() {...}
三、根据条件设置单元格颜色
有时,我们需要根据条件对表格中的一些单元格进行颜色标记,比如把布尔值为true的单元格设置为红色,false的设置为绿色。此时,我们需要先使用WriteCellValueWriteHandler继承类来写入Excel文件,然后再使用ConditionCellStyleStrategy类来根据条件设置单元格颜色。
1、创建一个ExcelWriter对象
2、设置单元格样式
3、遍历单元格,根据条件设置单元格的样式
4、写入Excel文件
public static void main(String[] args) { //创建一个直接写入文件的excel对象 String fileName = "D:/test.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); //写入Sheet1 WriteSheet writeSheet = EasyExcel.writerSheet(0, "Sheet1") .head(head()).build(); //设置样式 WriteCellStyle writeCellStyle = new WriteCellStyle(); //设置背景颜色 writeCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); //设置填充模式 writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); //设置文字颜色 writeCellStyle.setWriteFontColor(IndexedColors.WHITE.getIndex()); //写入单元格 excelWriter.write(data(), writeSheet); //根据条件设置单元格颜色 ConditionCellValueStyleStrategy writeCellStyleStrategy = new ConditionCellValueStyleStrategy(); writeCellStyleStrategy.add(new WriteCellStyle(writeCellStyle), new CustomCellWriteHandler() {//如果value为true,则打上红色标记 @Override public Boolean convert(Object value) { return (Boolean) value; } }); //是否包含表头 boolean includeHead = true; if (includeHead) { writeSheet.setHead(writeSheet.getHead()); } excelWriter.use(new ConditionCellStyleWriteHandler(writeCellStyleStrategy)); excelWriter.finish(); } public static List
> head() {...} public static List
> data() {...}
四、导出不同Sheet的数据并设置颜色
在某些情况下,我们需要在一张Excel中导出多个Sheet,每个Sheet中数据的样式和颜色可能都不尽相同。此时我们可以按照如下方式实现:
1、创建一个ExcelWriter对象
2、设置每个Sheet的样式
3、循环写入数据并设置样式
4、写入Excel文件
public static void main(String[] args) { String fileName = "D:/test.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); //写入Sheet1 WriteSheet writeSheet1 = EasyExcel.writerSheet(0, "Sheet1") .head(head1()) .registerWriteHandler(new CellFillStyleWriteHandler(getBgColor(IndexedColors.RED.getIndex())))//设置样式 .build(); excelWriter.write(data1(), writeSheet1); //写入Sheet2 WriteSheet writeSheet2 = EasyExcel.writerSheet(1, "Sheet2") .head(head2()) .registerWriteHandler(new CellFillStyleWriteHandler(getBgColor(IndexedColors.GREEN.getIndex())))//设置样式 .build(); excelWriter.write(data2(), writeSheet2); excelWriter.finish(); } public static List
> data1() {...} public static List
> data2() {...} public static List
> head1() {...} public static List
> head2() {...} /** * 设置单元格背景颜色 */ private static WriteCellStyle getBgColor(short color) { WriteCellStyle writeCellStyle = new WriteCellStyle(); writeCellStyle.setFillForegroundColor(color); writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); return writeCellStyle; }