You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core项目中如何为Excel导出的DataTable单元格着色

问题描述

在.NET Core项目中已创建并填充好DataTable,代码如下:

DataTable dt = new();     
dt.Columns.Add("Status");
dt.Columns.Add("Base");
dt.Columns.Add("First Date");
dt.Columns.Add("Second Date");
dt.Columns.Add("Failure Mode");

dataAll.ForEach(row =>
{
    dt.Rows.Add(
        row.status,
        row.partBase,
        row.pcaDate,
        row.icaDate,
        row.failureMode
    );
});

当前使用XLWorkbook将DataTable导出为Excel,代码如下:

using XLWorkbook wb = new();
// create data table
DataTable dt = MapDataToExcel(response.Result.ToList());

// add as worksheet
wb.Worksheets.Add(dt, "Rapor");          
 
// save it as a file then stream it to the user
using MemoryStream stream = new MemoryStream();
wb.SaveAs(stream);

return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Rapor.xlsx");

需要实现:当Status列的值为R时,将对应单元格设置为红色背景。

解决方案

可以通过以下步骤实现单元格着色:

  1. 获取目标工作表:添加DataTable到工作簿后,获取名为"Rapor"的工作表。
  2. 定位Status列:动态找到Status列的位置(Excel行列索引为1-based)。
  3. 创建红色背景样式:定义统一的红色填充样式,避免重复创建提升性能。
  4. 遍历数据行应用样式:跳过表头行,逐行判断Status单元格的值,符合条件则应用样式。

修改后的完整代码如下:

using XLWorkbook wb = new();
DataTable dt = MapDataToExcel(response.Result.ToList());
var worksheet = wb.Worksheets.Add(dt, "Rapor");

// 定位Status列的索引
int statusColumnIndex = worksheet.Row(1).Cells(c => c.Value.ToString() == "Status").First().Address.ColumnNumber;

// 创建红色背景样式
var redBackgroundStyle = wb.Style;
redBackgroundStyle.Fill.BackgroundColor = XLColor.Red;

// 遍历数据行(跳过第一行表头)
for (int rowIndex = 2; rowIndex <= worksheet.LastRowUsed().RowNumber; rowIndex++)
{
    var statusCell = worksheet.Cell(rowIndex, statusColumnIndex);
    if (statusCell.Value.ToString() == "R")
    {
        statusCell.Style = redBackgroundStyle;
    }
}

using MemoryStream stream = new MemoryStream();
wb.SaveAs(stream);

return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Rapor.xlsx");

补充说明

  • Excel采用1-based索引,因此表头行是第1行,数据行从第2行开始遍历。
  • 动态定位列索引的方式,避免了硬编码列位置导致的维护问题。
  • 复用样式对象可以减少内存开销,适合数据量较大的场景。

内容的提问来源于stack exchange,提问作者brt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:16:31