引言
在数据分析和报表制作过程中,快速识别关键数据、异常值和趋势是提高工作效率的关键。手动逐个检查数据不仅耗时,还容易遗漏重要信息。通过条件格式,可以根据数据特征自动应用不同的视觉样式,让重要数据一目了然。
本文将介绍如何使用 java 程序化地在 excel 工作表中应用各种条件格式,包括数值比较、数据条、色阶、图标集、重复值检测、平均值高亮等,实现数据的智能可视化分析。
本文使用的方法需要用到免费的 free spire.xls for java,可通过 maven 或手动导入 jar 包的方式集成到项目中。
环境准备
maven 依赖配置
在项目的 pom.xml 文件中添加以下依赖:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependency>
<groupid>e-iceblue</groupid>
<artifactid>spire.xls.free</artifactid>
<version>16.3.1</version>
</dependency>或者直接从官网下载 jar 包并手动导入项目。
1. 基于数值比较的条件格式
数值比较是最常用的条件格式类型,可以根据单元格值与指定值的关系自动应用格式。
1.1 高亮大于指定值的单元格
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
import java.awt.*;
public class highlightgreaterthan {
public static void main(string[] args) throws exception {
// 创建工作簿
workbook workbook = new workbook();
worksheet sheet = workbook.getworksheets().get(0);
// 添加示例数据
sheet.getcellrange("a1").setnumbervalue(582);
sheet.getcellrange("a2").setnumbervalue(234);
sheet.getcellrange("a3").setnumbervalue(314);
sheet.getcellrange("a4").setnumbervalue(50);
sheet.getcellrange("b1").setnumbervalue(150);
sheet.getcellrange("b2").setnumbervalue(894);
sheet.getcellrange("b3").setnumbervalue(560);
sheet.getcellrange("b4").setnumbervalue(900);
// 添加条件格式:大于800的值显示红色字体和灰色背景
xlsconditionalformats xcfs = sheet.getconditionalformats().add();
xcfs.addrange(sheet.getallocatedrange());
iconditionalformat format = xcfs.addcondition();
format.setformattype(conditionalformattype.cellvalue);
format.setfirstformula("800");
format.setoperator(comparisonoperatortype.greater);
format.setfontcolor(color.red);
format.setbackcolor(color.light_gray);
// 保存文件
workbook.savetofile("output/highlightgreaterthan.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
conditionalformattype.cellvalue表示基于单元格值的条件格式comparisonoperatortype.greater表示"大于"比较运算符setfirstformula()设置比较的基准值setfontcolor()和setbackcolor()分别设置字体颜色和背景颜色
此条件格式会自动高亮所有大于800的单元格,便于快速识别高值数据。

1.2 高亮小于指定值的单元格
// 添加条件格式:小于300的值显示绿色字体和蓝色背景
xlsconditionalformats xcfs2 = sheet.getconditionalformats().add();
xcfs2.addrange(sheet.getallocatedrange());
iconditionalformat format2 = xcfs2.addcondition();
format2.setformattype(conditionalformattype.cellvalue);
format2.setfirstformula("300");
format2.setoperator(comparisonoperatortype.less);
format2.setfontcolor(color.green);
format2.setbackcolor(color.blue);使用场景: 适用于识别低值数据、异常值或需要特别关注的小数值。
1.3 高亮介于两个值之间的单元格
// 添加条件格式:介于300到500之间的值显示黄色背景
xlsconditionalformats xcfs3 = sheet.getconditionalformats().add();
xcfs3.addrange(sheet.getcellrange("a1:d4"));
iconditionalformat format3 = xcfs3.addcondition();
format3.setformattype(conditionalformattype.cellvalue);
format3.setfirstformula("300");
format3.setsecondformula("500");
format3.setoperator(comparisonoperatortype.between);
format3.setbackcolor(color.yellow);说明:
setsecondformula()设置范围的上限值comparisonoperatortype.between表示"介于...之间"的运算符- 此格式会高亮所有在300到500之间的数值
1.4 高亮不在指定范围内的单元格
// 添加条件格式:不在100到200之间的值显示条纹图案
xlsconditionalformats xcfs4 = sheet.getconditionalformats().add();
xcfs4.addrange(sheet.getcellrange("a1:d4"));
iconditionalformat format4 = xcfs4.addcondition();
format4.setformattype(conditionalformattype.cellvalue);
format4.setfirstformula("100");
format4.setsecondformula("200");
format4.setoperator(comparisonoperatortype.notbetween);
format4.setfillpattern(excelpatterntype.reversediagonalstripe);
format4.setcolor(color.light_gray);
format4.setbackcolor(color.black);使用场景: 适用于识别异常值或超出正常范围的数据。
2. 数据条条件格式
数据条通过在单元格中显示渐变填充的条形图,直观展示数值大小。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
import java.awt.*;
public class applydatabars {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
worksheet sheet = workbook.getworksheets().get(0);
// 添加示例数据
sheet.getcellrange("a1").setnumbervalue(582);
sheet.getcellrange("a2").setnumbervalue(234);
sheet.getcellrange("a3").setnumbervalue(314);
sheet.getcellrange("a4").setnumbervalue(50);
sheet.getcellrange("b1").setnumbervalue(150);
sheet.getcellrange("b2").setnumbervalue(894);
sheet.getcellrange("b3").setnumbervalue(560);
sheet.getcellrange("b4").setnumbervalue(900);
// 设置行高和列宽
sheet.getallocatedrange().setrowheight(15);
sheet.getallocatedrange().setcolumnwidth(17);
// 添加数据条条件格式
xlsconditionalformats xcfs = sheet.getconditionalformats().add();
xcfs.addrange(sheet.getallocatedrange());
iconditionalformat format = xcfs.addcondition();
format.setformattype(conditionalformattype.databar);
format.getdatabar().setbarcolor(color.blue);
workbook.savetofile("output/applydatabars.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
conditionalformattype.databar表示数据条类型getdatabar().setbarcolor()设置数据条的颜色- 数据条长度与单元格值成正比,值越大条越长
使用场景: 适用于快速比较数值大小,常用于销售数据、绩效指标等场景。

3. 色阶条件格式
色阶使用双色或三色渐变来表示数值分布,直观展示数据的高低分布。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
public class applycolorscales {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
worksheet sheet = workbook.getworksheets().get(0);
// 添加示例数据
sheet.getcellrange("a1").setnumbervalue(582);
sheet.getcellrange("a2").setnumbervalue(234);
sheet.getcellrange("a3").setnumbervalue(314);
sheet.getcellrange("a4").setnumbervalue(50);
sheet.getcellrange("b1").setnumbervalue(150);
sheet.getcellrange("b2").setnumbervalue(894);
sheet.getcellrange("b3").setnumbervalue(560);
sheet.getcellrange("b4").setnumbervalue(900);
// 添加色阶条件格式
xlsconditionalformats xcfs = sheet.getconditionalformats().add();
xcfs.addrange(sheet.getallocatedrange());
iconditionalformat format = xcfs.addcondition();
format.setformattype(conditionalformattype.colorscale);
workbook.savetofile("output/applycolorscales.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
conditionalformattype.colorscale表示色阶类型- 默认使用三色渐变(红-黄-绿),低值为红色,高值为绿色
- 色阶会自动根据数据分布计算颜色
使用场景: 适用于展示数据分布趋势,如温度变化、销售趋势等。

4. 图标集条件格式
图标集使用图标(如交通灯、箭头、星星等)来表示数据的不同等级。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
public class applyiconsets {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
worksheet sheet = workbook.getworksheets().get(0);
// 添加示例数据
sheet.getcellrange("a1").setnumbervalue(582);
sheet.getcellrange("a2").setnumbervalue(234);
sheet.getcellrange("a3").setnumbervalue(314);
sheet.getcellrange("a4").setnumbervalue(50);
sheet.getcellrange("b1").setnumbervalue(150);
sheet.getcellrange("b2").setnumbervalue(894);
sheet.getcellrange("b3").setnumbervalue(560);
sheet.getcellrange("b4").setnumbervalue(900);
// 添加图标集条件格式
xlsconditionalformats xcfs = sheet.getconditionalformats().add();
xcfs.addrange(sheet.getallocatedrange());
iconditionalformat format = xcfs.addcondition();
format.setformattype(conditionalformattype.iconset);
format.geticonset().seticonsettype(iconsettype.threetrafficlights1);
workbook.savetofile("output/applyiconsets.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
conditionalformattype.iconset表示图标集类型iconsettype.threetrafficlights1使用三色交通灯图标- 其他图标类型包括:
threearrows、threesymbols、fourrating、fivequarters等
使用场景: 适用于状态指示、绩效评估、风险等级划分等场景。

5. 高亮重复值和唯一值
在数据清洗和验证过程中,识别重复值和唯一值非常重要。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
import java.awt.*;
public class highlightduplicateunique {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
workbook.loadfromfile("data/template_xls_6.xlsx");
worksheet sheet = workbook.getworksheets().get(0);
// 高亮重复值(红色背景)
xlsconditionalformats xcfs1 = sheet.getconditionalformats().add();
xcfs1.addrange(sheet.getcellrange("c2:c10"));
iconditionalformat format1 = xcfs1.addcondition();
format1.setformattype(conditionalformattype.duplicatevalues);
format1.setbackcolor(color.red);
// 高亮唯一值(黄色背景)
xlsconditionalformats xcfs2 = sheet.getconditionalformats().add();
xcfs2.addrange(sheet.getcellrange("c2:c10"));
iconditionalformat format2 = xcfs2.addcondition();
format2.setformattype(conditionalformattype.uniquevalues);
format2.setbackcolor(color.yellow);
workbook.savetofile("output/highlightduplicateunique.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
conditionalformattype.duplicatevalues高亮重复出现的值conditionalformattype.uniquevalues高亮只出现一次的值- 两种格式可以同时应用,便于数据质量分析
使用场景: 数据去重、数据质量检查、唯一性验证等。
6. 高亮高于或低于平均值的单元格
平均值条件格式可以快速识别高于或低于平均水平的数值。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
import java.awt.*;
public class highlightaveragevalues {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
workbook.loadfromfile("data/template_xls_6.xlsx");
worksheet sheet = workbook.getworksheets().get(0);
// 高亮低于平均值的单元格(蓝色背景)
xlsconditionalformats xcfs1 = sheet.getconditionalformats().add();
xcfs1.addrange(sheet.getcellrange("e2:e10"));
iconditionalformat cf1 = xcfs1.addaveragecondition(averagetype.below);
cf1.setbackcolor(color.blue);
// 高亮高于平均值的单元格(橙色背景)
xlsconditionalformats xcfs2 = sheet.getconditionalformats().add();
xcfs2.addrange(sheet.getcellrange("e2:e10"));
iconditionalformat cf2 = xcfs2.addaveragecondition(averagetype.above);
cf2.setbackcolor(color.orange);
workbook.savetofile("output/highlightaveragevalues.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
addaveragecondition(averagetype.below)创建低于平均值的条件addaveragecondition(averagetype.above)创建高于平均值的条件- 平均值会根据选定范围内的数据自动计算
使用场景: 绩效评估、销售分析、成绩排名等需要与平均水平对比的场景。
7. 高亮排名前n或后n的值
排名条件格式可以快速识别最高或最低的n个值。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
import java.awt.*;
public class highlightrankedvalues {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
workbook.loadfromfile("data/template_xls_6.xlsx");
worksheet sheet = workbook.getworksheets().get(0);
// 高亮前2名(红色背景)
xlsconditionalformats xcfs1 = sheet.getconditionalformats().add();
xcfs1.addrange(sheet.getcellrange("d2:d10"));
iconditionalformat format1 = xcfs1.addtopbottomcondition(topbottomtype.top, 2);
format1.setformattype(conditionalformattype.topbottom);
format1.setbackcolor(color.red);
// 高亮后2名(绿色背景)
xlsconditionalformats xcfs2 = sheet.getconditionalformats().add();
xcfs2.addrange(sheet.getcellrange("e2:e10"));
iconditionalformat format2 = xcfs2.addtopbottomcondition(topbottomtype.bottom, 2);
format2.setformattype(conditionalformattype.topbottom);
format2.setbackcolor(color.green);
workbook.savetofile("output/highlightrankedvalues.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
addtopbottomcondition(topbottomtype.top, 2)高亮前2名addtopbottomcondition(topbottomtype.bottom, 2)高亮后2名- 可以根据需要调整排名数量
使用场景: 识别最佳/最差表现、top n 分析、异常值检测等。
8. 基于公式的条件格式
公式条件格式提供了最大的灵活性,可以根据自定义公式应用格式。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
public class formulaconditionalformat {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
workbook.loadfromfile("data/template_xls_6.xlsx");
worksheet sheet = workbook.getworksheets().get(0);
// 获取第一列的范围
cellrange range = sheet.getcolumns()[0];
// 添加公式条件格式:当a列值小于b列值时高亮
xlsconditionalformats xcfs = sheet.getconditionalformats().add();
xcfs.addrange(range);
iconditionalformat conditional = xcfs.addcondition();
conditional.setformattype(conditionalformattype.formula);
conditional.setfirstformula("=($a1<$b1)");
conditional.setbackknowncolor(excelcolors.yellow);
workbook.savetofile("output/formulaconditionalformat.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
conditionalformattype.formula表示基于公式的条件格式setfirstformula()设置条件公式,公式需要以等号开头setbackknowncolor()使用预定义颜色设置背景
使用场景: 复杂条件判断、跨列比较、自定义业务规则等。
9. 基于日期的条件格式
日期条件格式可以高亮特定时间段的日期,如最近7天、上个月等。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
import java.awt.*;
public class dateconditionalformat {
public static void main(string[] args) {
workbook workbook = new workbook();
workbook.loadfromfile("data/template_xls_6.xlsx");
worksheet sheet = workbook.getworksheets().get(0);
// 高亮最近7天的日期
xlsconditionalformats xcfs = sheet.getconditionalformats().add();
xcfs.addrange(sheet.getallocatedrange());
iconditionalformat conditionalformat = xcfs.addtimeperiodcondition(timeperiodtype.last7days);
conditionalformat.setbackcolor(color.orange);
workbook.savetofile("output/dateconditionalformat.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
addtimeperiodcondition(timeperiodtype.last7days)创建最近7天的条件- 其他时间周期包括:
lastmonth、lastweek、nextmonth、nextweek、thismonth、thisweek、today、tomorrow、yesterday等
使用场景: 项目进度跟踪、任务管理、时间敏感数据分析等。
10. 带边框样式的条件格式
除了颜色和图案,条件格式还可以设置边框样式。
import com.spire.xls.*;
import com.spire.xls.core.iconditionalformat;
import com.spire.xls.core.spreadsheet.collections.xlsconditionalformats;
import java.awt.*;
public class borderconditionalformat {
public static void main(string[] args) throws exception {
workbook workbook = new workbook();
workbook.loadfromfile("data/conditionalformatruntime.xlsx");
worksheet sheet = workbook.getworksheets().get(0);
// 添加条件格式:小于500的值显示蓝色边框
xlsconditionalformats xcfs = sheet.getconditionalformats().add();
xcfs.addrange(sheet.getcellrange("a2:d2"));
iconditionalformat cf = xcfs.addcondition();
cf.setformattype(conditionalformattype.cellvalue);
cf.setfirstformula("500");
cf.setoperator(comparisonoperatortype.less);
// 设置边框颜色和样式
cf.setleftbordercolor(color.blue);
cf.setrightbordercolor(color.blue);
cf.settopbordercolor(color.green);
cf.setbottombordercolor(color.green);
cf.setleftborderstyle(linestyletype.medium);
cf.setrightborderstyle(linestyletype.thick);
cf.settopborderstyle(linestyletype.double);
cf.setbottomborderstyle(linestyletype.double);
workbook.savetofile("output/borderconditionalformat.xlsx", excelversion.version2013);
workbook.dispose();
}
}说明:
setleftbordercolor()、setrightbordercolor()等设置各边框颜色setleftborderstyle()、setrightborderstyle()等设置各边框样式- 边框样式包括:
thin、medium、thick、double等
使用场景: 需要突出显示但不改变背景色的场景,如打印报表。
关键类与方法解析
核心类
| 类名 | 说明 |
|---|---|
workbook | excel 工作簿对象,用于创建、加载和保存 excel 文件 |
worksheet | excel 工作表对象,提供访问单元格和条件格式的功能 |
xlsconditionalformats | 条件格式集合,用于管理和添加条件格式规则 |
iconditionalformat | 条件格式接口,定义具体的格式规则和样式 |
cellrange | 单元格范围对象,表示一个或多个单元格 |
条件格式类型
| 类型 | 枚举值 | 说明 |
|---|---|---|
| 数值比较 | conditionalformattype.cellvalue | 基于单元格值与指定值的比较 |
| 数据条 | conditionalformattype.databar | 在单元格中显示渐变条形图 |
| 色阶 | conditionalformattype.colorscale | 使用颜色渐变表示数值分布 |
| 图标集 | conditionalformattype.iconset | 使用图标表示数据等级 |
| 重复值 | conditionalformattype.duplicatevalues | 高亮重复出现的值 |
| 唯一值 | conditionalformattype.uniquevalues | 高亮只出现一次的值 |
| 公式 | conditionalformattype.formula | 基于自定义公式的条件 |
| 排名 | conditionalformattype.topbottom | 高亮前n或后n名 |
比较运算符
| 运算符 | 枚举值 | 说明 |
|---|---|---|
| 大于 | comparisonoperatortype.greater | 单元格值 > 指定值 |
| 小于 | comparisonoperatortype.less | 单元格值 < 指定值 |
| 介于 | comparisonoperatortype.between | 指定值1 ≤ 单元格值 ≤ 指定值2 |
| 不介于 | comparisonoperatortype.notbetween | 单元格值不在指定范围内 |
| 等于 | comparisonoperatortype.equal | 单元格值 = 指定值 |
| 不等于 | comparisonoperatortype.notequal | 单元格值 ≠ 指定值 |
常用方法
| 方法 | 说明 |
|---|---|
addcondition() | 添加一个新的条件格式规则 |
addrange(cellrange) | 为条件格式添加应用范围 |
addaveragecondition(averagetype) | 添加平均值条件 |
addtopbottomcondition(topbottomtype, int) | 添加排名条件 |
addtimeperiodcondition(timeperiodtype) | 添加时间周期条件 |
setformattype(conditionalformattype) | 设置条件格式类型 |
setfirstformula(string) | 设置第一个公式或比较值 |
setsecondformula(string) | 设置第二个公式或比较值(用于范围条件) |
setoperator(comparisonoperatortype) | 设置比较运算符 |
setfontcolor(color) | 设置字体颜色 |
setbackcolor(color) | 设置背景颜色 |
setbackknowncolor(excelcolors) | 使用预定义颜色设置背景 |
setfillpattern(excelpatterntype) | 设置填充图案 |
getdatabar() | 获取数据条对象 |
geticonset() | 获取图标集对象 |
总结
通过本文示例,你已经了解如何使用 java 在 excel 工作表中应用各种条件格式。从基础的数值比较到高级的数据条、色阶、图标集,再到重复值检测、平均值高亮和排名分析,整个过程高度自动化,特别适用于数据分析、报表制作和数据质量检查场景。
相比手动设置条件格式,代码方式具有以下优势:
- 批量处理:可以一次性为多个工作表或多个范围应用条件格式
- 一致性:确保所有报表使用统一的格式规则
- 可维护性:格式规则集中管理,便于修改和扩展
- 自动化:集成到数据处理流程中,无需人工干预
你可以在此基础上扩展更多能力,例如:
- 结合数据验证规则,实现数据质量自动检查
- 根据业务规则动态生成条件格式
- 批量处理多个 excel 文件,统一应用格式标准
- 与数据库集成,实现报表自动化生成
如果你正在处理数据分析、报表制作或数据质量检查相关需求,这种基于 java 的条件格式方案将为你的工作带来显著提升。
以上就是使用java程序化地在excel工作表中应用各种条件格式的详细内容,更多关于java在excel表中应用条件格式的资料请关注代码网其它相关文章!
发表评论