对于数据较多的工作表,为相邻行设置不同的背景颜色,可以帮助区分数据行,让内容更容易查看和阅读。实现隔行变色的方法有很多,例如使用 excel 内置的表格样式,或者通过条件格式设置规则。本文将介绍如何在 c# 和 vb.net 中使用条件格式为 excel 工作表设置交替行颜色,并结合相关的 .net excel 处理组件完成操作。
安装相关 .net 组件
开始之前,需要在 .net 项目中添加用于处理 excel 文件的相关 dll 文件。你可以从组件的官方资源中获取安装包,也可以通过 nuget 安装相应的程序包。
pm> install-package spire.xls
使用条件格式为 excel 隔行设置颜色
以下是使用条件格式为 excel 工作表中的奇偶行设置不同颜色的基本步骤:
- 创建一个 workbook 对象。
- 使用 workbook.loadfromfile() 方法加载 excel 文件。
- 通过 workbook.worksheets[index] 属性获取工作簿中的指定工作表。
- 使用 worksheet.conditionalformats.add() 方法为工作表添加条件格式,并获取 xlsconditionalformats 对象。
- 使用 xlsconditionalformats.addrange() 方法设置需要应用条件格式的单元格区域。
- 使用 xlsconditionalformats.addcondition() 方法添加条件,并设置条件公式以及偶数行的单元格颜色。
- 再添加一个条件,为奇数行设置相应的单元格格式。
- 使用 workbook.savetofile() 方法将处理后的工作簿保存为 excel 文件。
完整示例代码如下:
using spire.xls;
using spire.xls.core;
using spire.xls.core.spreadsheet.collections;
using system.drawing;
namespace alternaterowcolors
{
class program
{
static void main(string[] args)
{
// 创建一个 workbook 对象
workbook workbook = new workbook();
// 加载 excel 文件
workbook.loadfromfile(@"c:\users\administrator\desktop\sample.xlsx");
// 获取第一个工作表
worksheet sheet = workbook.worksheets[0];
// 为工作表添加条件格式
xlsconditionalformats format = sheet.conditionalformats.add();
// 设置应用条件格式的单元格区域
format.addrange(sheet.range[2, 1, sheet.lastrow, sheet.lastcolumn]);
// 添加条件,根据公式更改单元格格式
iconditionalformat condition1 = format.addcondition();
condition1.firstformula = "=mod(row(),2)=0";
condition1.formattype = conditionalformattype.formula;
condition1.backcolor = color.yellow;
// 添加另一个条件,根据公式更改单元格格式
iconditionalformat condition2 = format.addcondition();
condition2.firstformula = "=mod(row(),2)=1";
condition2.formattype = conditionalformattype.formula;
condition2.backcolor = color.lightseagreen;
// 将工作簿保存为 excel 文件
workbook.savetofile("alternaterowcolors.xlsx", excelversion.version2016);
}
}
}知识扩展
在 c# 中为 excel 隔行设置颜色,使用条件格式比手动填充更优雅——数据增删后,颜色会自动调整,无需重新设置。核心是添加一条基于公式的规则,公式为:=mod(row(),2)=0
这条公式会对偶数行应用格式;若要奇数行,改为 =mod(row(),2)=1。
下面整理几种主流库的实现方案。
方案一:epplus(开源免费,推荐)
epplus 从 5.0 开始支持条件格式,api 直观。非商业用途免费。
安装:install-package epplus
using officeopenxml;
using officeopenxml.style;
using system.drawing;
public static void setalternatingrowcolorswithepplus(string filepath)
{
// 非商业用途许可证
excelpackage.licensecontext = licensecontext.noncommercial;
using (var package = new excelpackage())
{
var ws = package.workbook.worksheets.add("数据");
// 1. 准备示例数据
ws.cells["a1"].value = "姓名";
ws.cells["b1"].value = "年龄";
ws.cells["c1"].value = "城市";
ws.cells["a2"].value = "张三";
ws.cells["b2"].value = 25;
ws.cells["c2"].value = "北京";
ws.cells["a3"].value = "李四";
ws.cells["b3"].value = 30;
ws.cells["c3"].value = "上海";
ws.cells["a4"].value = "王五";
ws.cells["b4"].value = 28;
ws.cells["c4"].value = "广州";
ws.cells["a5"].value = "赵六";
ws.cells["b5"].value = 35;
ws.cells["c5"].value = "深圳";
// 2. 定义要应用条件格式的区域(数据行从第2行开始)
var datarange = ws.cells["a2:c100"];
// 3. 添加基于公式的条件格式
var cf = ws.conditionalformatting.addexpression(datarange);
cf.formula = "mod(row(),2)=0"; // 偶数行上色
cf.style.fill.patterntype = excelfillstyle.solid;
cf.style.fill.backgroundcolor.color = color.lightgray;
// 可选:添加第二条规则给奇数行(如需两种颜色交替)
// var cf2 = ws.conditionalformatting.addexpression(datarange);
// cf2.formula = "mod(row(),2)=1";
// cf2.style.fill.patterntype = excelfillstyle.solid;
// cf2.style.fill.backgroundcolor.color = color.whitesmoke;
package.saveas(new fileinfo(filepath));
}
}调用:
setalternatingrowcolorswithepplus(@"c:\temp\隔行变色_epplus.xlsx");
方案二:aspose.cells(商业库,功能全面)
aspose.cells 通过 formatcondition 添加表达式规则,适合企业级项目。
安装:install-package aspose.cells
using aspose.cells;
using system.drawing;
public static void setalternatingrowcolorswithaspose(string filepath)
{
workbook workbook = new workbook();
worksheet sheet = workbook.worksheets[0];
// 1. 准备示例数据
sheet.cells["a1"].putvalue("姓名");
sheet.cells["b1"].putvalue("年龄");
sheet.cells["c1"].putvalue("城市");
sheet.cells["a2"].putvalue("张三");
sheet.cells["b2"].putvalue(25);
sheet.cells["c2"].putvalue("北京");
sheet.cells["a3"].putvalue("李四");
sheet.cells["b3"].putvalue(30);
sheet.cells["c3"].putvalue("上海");
sheet.cells["a4"].putvalue("王五");
sheet.cells["b4"].putvalue(28);
sheet.cells["c4"].putvalue("广州");
// 2. 添加条件格式集合
int index = sheet.conditionalformattings.add();
formatconditioncollection fcc = sheet.conditionalformattings[index];
// 3. 设置应用区域 a2:c100
cellarea area = cellarea.createcellarea("a2", "c100");
fcc.addarea(area);
// 4. 添加表达式条件
int condindex = fcc.addcondition(formatconditiontype.expression);
formatcondition condition = fcc[condindex];
condition.formula1 = "=mod(row(),2)=0"; // 偶数行
condition.style.backgroundcolor = color.lightgray;
condition.style.pattern = backgroundtype.solid;
workbook.save(filepath);
}方案三:closedxml(开源免费,mit 协议)
closedxml 的 api 非常简洁,适合喜欢链式调用的开发者。
安装:install-package closedxml
using closedxml.excel;
public static void setalternatingrowcolorswithclosedxml(string filepath)
{
using (var workbook = new xlworkbook())
{
var ws = workbook.worksheets.add("数据");
// 1. 准备示例数据
ws.cell("a1").value = "姓名";
ws.cell("b1").value = "年龄";
ws.cell("c1").value = "城市";
ws.cell("a2").value = "张三";
ws.cell("b2").value = 25;
ws.cell("c2").value = "北京";
ws.cell("a3").value = "李四";
ws.cell("b3").value = 30;
ws.cell("c3").value = "上海";
ws.cell("a4").value = "王五";
ws.cell("b4").value = 28;
ws.cell("c4").value = "广州";
// 2. 对区域添加条件格式
var range = ws.range("a2:c100");
var cf = range.addconditionalformat();
// 3. 使用公式条件:偶数行填充浅灰色
cf.when(formula).is("mod(row(),2)=0")
.fill.setbackgroundcolor(xlcolor.lightgray);
workbook.saveas(filepath);
}
}注意:closedxml 中 formula 是 xlconditionalformattype 的枚举值,需要 using closedxml.excel;。
方案四:spire.xls(商业库,有免费版)
spire.xls 的 conditionalformattype.formula 可以直接设置公式和背景色。
安装:install-package spire.xls
using spire.xls;
using system.drawing;
public static void setalternatingrowcolorswithspire(string filepath)
{
workbook workbook = new workbook();
worksheet sheet = workbook.worksheets[0];
// 1. 准备数据
sheet.range["a1"].value = "姓名";
sheet.range["b1"].value = "年龄";
sheet.range["c1"].value = "城市";
sheet.range["a2"].value = "张三";
sheet.range["b2"].value = 25;
sheet.range["c2"].value = "北京";
sheet.range["a3"].value = "李四";
sheet.range["b3"].value = 30;
sheet.range["c3"].value = "上海";
// 2. 添加条件格式
var formats = sheet.conditionalformats;
var format = formats.add();
// 3. 设置应用区域和公式
format.range = sheet.range["a2:c100"];
format.formattype = conditionalformattype.formula;
format.firstformula = "mod(row(),2)=0";
format.backcolor = color.lightgray;
workbook.savetofile(filepath, excelversion.version2016);
}方案五:open xml sdk(免费,底层控制)
open xml sdk 是微软官方库,但条件格式的 xml 结构较复杂,需要手动构建多个元素。
安装:install-package documentformat.openxml
using documentformat.openxml;
using documentformat.openxml.packaging;
using documentformat.openxml.spreadsheet;
public static void setalternatingrowcolorswithopenxml(string filepath)
{
using (spreadsheetdocument doc = spreadsheetdocument.create(filepath, spreadsheetdocumenttype.workbook))
{
// 创建工作簿部件
workbookpart workbookpart = doc.addworkbookpart();
workbookpart.workbook = new workbook();
// 创建工作表
worksheetpart worksheetpart = workbookpart.addnewpart<worksheetpart>();
worksheetpart.worksheet = new worksheet(new sheetdata());
sheets sheets = doc.workbookpart.workbook.appendchild(new sheets());
sheet sheet = new sheet()
{
id = doc.workbookpart.getidofpart(worksheetpart),
sheetid = 1,
name = "数据"
};
sheets.append(sheet);
// 构建条件格式(简化示意,完整实现需定义 dxf 样式)
conditionalformatting conditionalformatting = new conditionalformatting()
{
sequenceofreferences = new listvalue<stringvalue>() { innertext = "a2:c100" }
};
formula formula = new formula("mod(row(),2)=0");
conditionalformattingrule rule = new conditionalformattingrule()
{
type = conditionalformatvalues.expression,
priority = 1,
formatid = 0 // 需在 differentialformats 中定义对应样式
};
rule.append(formula);
conditionalformatting.append(rule);
worksheetpart.worksheet.append(conditionalformatting);
workbookpart.workbook.save();
}
}说明:open xml sdk 实现条件格式需要额外创建 differentialformats 部件并定义 dxf 样式,代码量较大。除非有特殊底层控制需求,否则建议使用前四种方案。
总结
通过条件格式,可以根据行号自动为 excel 工作表中的奇数行和偶数行设置不同的背景颜色,从而让数据更加清晰、易于查看。本文通过 c# 示例,首先加载 excel 文件并获取目标工作表,然后设置需要应用条件格式的区域,并利用 mod 和 row 函数判断当前行是奇数行还是偶数行,分别应用不同的颜色。最后,将设置完成的工作簿保存为新的 excel 文件。
这种方法无需逐行修改单元格格式,当工作表中的数据发生变化时,条件格式也可以根据规则自动调整,适用于数据量较大的 excel 表格。
到此这篇关于c#代码实现使用条件格式为excel隔行设置颜色的文章就介绍到这了,更多相关c# excel隔行设置颜色内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论