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

Dynamics 365中如何通过X++正确设置Excel单元格背景色

D365 X++ 调用EPPlus设置Excel单元格背景色方案

问题背景

在Dynamics 365(D365)环境中通过X++开发生成Excel文件时,调用EPPlus类库设置单元格背景色会触发Invalid token '('.编译错误,原有问题代码如下:

System.IO.Stream workbookStream     = new System.IO.MemoryStream();
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();

var package = new OfficeOpenXml.ExcelPackage(memoryStream)
var package = new OfficeOpenXml.ExcelPackage(memoryStream)
var worksheets = package.get_Workbook().get_Worksheets();
var worksheet = worksheets.Add("SHEET");
var cells = worksheet.get_Cells();
var currentRow=1 ;

var cell = cells.get_Item(currentRow,1);
cell.set_Value("__MY__Value");

// 以下两行代码均触发编译错误
//cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color::FromArgb(190, 0, 0));
//cell.Style.Fill.BackgroundColor.Rgb(Winapi::rgb2int(255,255,255));

错误原因

X++与C#的.NET互操作调用语法存在差异,编译错误由三个问题导致:

  • X++编译器无法正确解析多层链式调用下的.NET方法重载、属性签名
  • Rgb是可写属性而非方法,不能使用括号传参的形式调用
  • EPPlus的颜色属性不支持System.Drawing.Color类型的隐式转换,直接传参会触发类型识别错误

正确实现代码

X++操作.NET对象时建议逐层声明变量类型,避免链式调用带来的编译异常,可运行的实现代码如下:

System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
OfficeOpenXml.ExcelPackage package = new OfficeOpenXml.ExcelPackage(memoryStream);
OfficeOpenXml.ExcelWorksheets worksheets = package.get_Workbook().get_Worksheets();
OfficeOpenXml.ExcelWorksheet worksheet = worksheets.Add("SHEET");
OfficeOpenXml.ExcelRange cells = worksheet.get_Cells();
int currentRow = 1;

OfficeOpenXml.ExcelRange cell = cells.get_Item(currentRow, 1);
cell.set_Value("__MY__Value");

// 必须先设置填充模式为实心,否则背景色不会生效
cell.get_Style().get_Fill().set_PatternType(OfficeOpenXml.Style.ExcelFillStyle::Solid);

// 方式1:通过ARGB值设置颜色
System.Drawing.Color fillColor = System.Drawing.Color::FromArgb(190, 0, 0);
OfficeOpenXml.Style.ExcelColor bgColor = cell.get_Style().get_Fill().get_BackgroundColor();
bgColor.SetColor(fillColor);

// 方式2:直接赋值十六进制RGB值(8位,前两位为透明度,无#前缀)
// cell.get_Style().get_Fill().get_BackgroundColor().set_Rgb("FFBE0000");

注意事项

  • 必须先将单元格填充的PatternType属性设置为Solid实心模式,否则背景色设置后导出文件不会展示对应颜色
  • 尽量避免多层.NET对象的链式调用,逐层声明强类型变量后再操作属性/方法,能规避绝大多数X++与.NET互操作的编译错误
  • 给Rgb属性赋值时,需要传入8位十六进制字符串,前两位为Alpha透明度通道,后六位为标准RGB色值,字符串不能带#前缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:57:43