当前位置: 代码网 > it编程>编程语言>Asp.net > C#代码实现使用条件格式为Excel隔行设置颜色

C#代码实现使用条件格式为Excel隔行设置颜色

2026年09月20日 Asp.net 我要评论
对于数据较多的工作表,为相邻行设置不同的背景颜色,可以帮助区分数据行,让内容更容易查看和阅读。实现隔行变色的方法有很多,例如使用 excel 内置的表格样式,或者通过条件格式设置规则。本文将介绍如何在

对于数据较多的工作表,为相邻行设置不同的背景颜色,可以帮助区分数据行,让内容更容易查看和阅读。实现隔行变色的方法有很多,例如使用 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 中 formulaxlconditionalformattype 的枚举值,需要 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 文件并获取目标工作表,然后设置需要应用条件格式的区域,并利用 modrow 函数判断当前行是奇数行还是偶数行,分别应用不同的颜色。最后,将设置完成的工作簿保存为新的 excel 文件。

这种方法无需逐行修改单元格格式,当工作表中的数据发生变化时,条件格式也可以根据规则自动调整,适用于数据量较大的 excel 表格。

到此这篇关于c#代码实现使用条件格式为excel隔行设置颜色的文章就介绍到这了,更多相关c# excel隔行设置颜色内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

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

发表评论

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