当前位置: 代码网 > it编程>编程语言>Java > 使用Java程序化地在Excel工作表中应用各种条件格式

使用Java程序化地在Excel工作表中应用各种条件格式

2026年04月20日 Java 我要评论
引言在数据分析和报表制作过程中,快速识别关键数据、异常值和趋势是提高工作效率的关键。手动逐个检查数据不仅耗时,还容易遗漏重要信息。通过条件格式,可以根据数据特征自动应用不同的视觉样式,让重要数据一目了

引言

在数据分析和报表制作过程中,快速识别关键数据、异常值和趋势是提高工作效率的关键。手动逐个检查数据不仅耗时,还容易遗漏重要信息。通过条件格式,可以根据数据特征自动应用不同的视觉样式,让重要数据一目了然。

本文将介绍如何使用 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 使用三色交通灯图标
  • 其他图标类型包括:threearrowsthreesymbolsfourratingfivequarters 等

使用场景: 适用于状态指示、绩效评估、风险等级划分等场景。

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&lt;$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天的条件
  • 其他时间周期包括:lastmonthlastweeknextmonthnextweekthismonththisweektodaytomorrowyesterday 等

使用场景: 项目进度跟踪、任务管理、时间敏感数据分析等。

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() 等设置各边框样式
  • 边框样式包括:thinmediumthickdouble 等

使用场景: 需要突出显示但不改变背景色的场景,如打印报表。

关键类与方法解析

核心类

类名说明
workbookexcel 工作簿对象,用于创建、加载和保存 excel 文件
worksheetexcel 工作表对象,提供访问单元格和条件格式的功能
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表中应用条件格式的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com