用Interop设颜色需用BGR格式int值(如0xFF0000为蓝色),EPPlus用标准Color或十六进制;均须注意资源释放、样式初始化及环境兼容性。

用 Microsoft.Office.Interop.Excel 设置单元格背景色和字体颜色
直接改 Interior.Color 和 Font.Color 就行,但得注意颜色值是 BGR(不是 RGB),而且必须用 int 类型的 32 位整数表示。比如想设红色,别写 Color.Red —— Interop 不认 System.Drawing.Color。
- 背景色:用
cell.Interior.Color = 0xFF0000(BGR 顺序,实际是蓝=0xFF、绿=0x00、红=0x00 → 显示为蓝色) - 字体色:用
cell.Font.Color = 0x0000FF(同理,这是红色字体) - 如果从
System.Drawing.Color转换,先调ToArgb(),再用ColorTranslator.ToOle()更稳妥,因为ToArgb()返回的是 ARGB,Interop 要 OLE_COLOR 格式 - 没释放 COM 对象会导致 Excel 进程卡在后台,每次操作完记得调
Marshal.ReleaseComObject()(或用using包装器 +IDisposable实现)
EPPlus 设置单元格填充色和字体样式(推荐用于无 Excel 安装环境)
EPPlus 不依赖 Office,纯 .NET 库,读写 .xlsx 文件快且稳定,但只支持 Open XML 格式(不支持 .xls)。颜色用标准 Color 或十六进制字符串更直观。
- 背景色:
worksheet.Cells["A1"].Style.Fill.BackgroundColor.SetColor(Color.LightGreen)或SetColor(ColorTranslator.FromHtml("#FFD700")) - 字体色:
worksheet.Cells["A1"].Style.Font.Color.SetColor(Color.DarkBlue) - 注意:
Fill.PatternType默认是None,设颜色前得先设成Solid,否则无效:worksheet.Cells["A1"].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid - 中文 Excel 打开后若颜色异常,检查是否用了 Alpha 通道(
Color.FromArgb(128, 255, 0, 0))—— EPPlus 对半透明支持有限,建议用不带 Alpha 的纯色
常见错误:Exception from HRESULT: 0x800A03EC 是什么情况
这个错误几乎都出在 Interop 场景下,本质是 COM 调用失败,和颜色设置本身无关,但常在设色时触发。
- Excel 应用实例被其他线程/进程占用(比如手动打开了同一个文件)
- 单元格地址写错,例如
worksheet.Cells["ZZZ10000"]超出范围(.xlsx 最大行为 1048576,列为 XFD) - 没正确初始化
Application.Visible = false就开始操作,尤其在 Windows Server 上容易因桌面交互策略失败 - 用完没调
app.Quit()+Marshal.ReleaseComObject(),下次运行时残留进程干扰新实例
字体加粗、斜体等样式要一起配,不能只设颜色
颜色和字体样式属于同一套 Style 层级,单独改 Color 没问题,但若之前没初始化过 Font 或 Fill,某些库会静默忽略。
- Interop 中:确保先访问
cell.Font再设.Color,否则可能报空引用(尤其新单元格) - EPPlus 中:所有样式操作前,最好先执行
worksheet.Cells["A1"].Style.Locked = false(如果工作表被保护过) - 批量设样式时,别循环每个 cell 单独赋值 —— 改用区域对象一次设置,比如
worksheet.Cells["A1:C10"].Style...,性能差一个数量级










