一、设置整个单元格的背景颜色
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<List<String>> head() {...}
public static List<List<String>> 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<List<String>> head() {...}
public static List<List<String>> 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<Boolean>() {//如果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<List<String>> head() {...}
public static List<List<String>> 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<List<String>> data1() {...}
public static List<List<String>> data2() {...}
public static List<List<String>> head1() {...}
public static List<List<String>> head2() {...}
/**
* 设置单元格背景颜色
*/
private static WriteCellStyle getBgColor(short color) {
WriteCellStyle writeCellStyle = new WriteCellStyle();
writeCellStyle.setFillForegroundColor(color);
writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
return writeCellStyle;
}