使用Open XML 2.0在Excel中获取单元格背景颜色

时间:2012-05-25 14:27:36

标签: c# excel .net-4.0 openxml-sdk

我想在excel-spreadsheet中获取单元格的backgroundcolor。我正在使用Open XML 2.0 SDK,我可以打开* .xlsx文件并获取单元格值。我获取Background-Color的代码如下:

   public BackgroundColor GetCellBackColor(Cell theCell, SpreadsheetDocument document)
    {
        BackgroundColor backGroundColor = null;
        WorkbookStylesPart styles = SpreadsheetReader.GetWorkbookStyles(document);
        int cellStyleIndex = (int)theCell.StyleIndex.Value;
        CellFormat cellFormat = (CellFormat)styles.Stylesheet.CellFormats.ChildElements[cellStyleIndex];
        Fill fill = (Fill)styles.Stylesheet.Fills.ChildElements[(int)cellFormat.FillId.Value];
        backGroundColor = fill.PatternFill.BackgroundColor;

        return backGroundColor;
    }

我的问题是,PatternFill.BackgroundColor只返回一个自然数,我认为它是风格的id。我的问题是,代码行

DocumentFormat.OpenXml.Spreadsheet.Color c = (DocumentFormat.OpenXml.Spreadsheet.Color)styles.Stylesheet.Colors.ChildElements[Int32.Parse(backGroundColor.InnerText)];

返回错误,因为Stylesheet.Colorsnull ......也许是因为我在excel中使用了“内置”颜色 - 而不是自定义颜色?!

我有什么想法可以“计算”“backGroundColor-Value”中的真实颜色数?

2 个答案:

答案 0 :(得分:10)

excel电子表格中单元格的填充图案是 由两种颜色组成:背景颜色和前景颜色。 术语前景色在这里有点误导。它不是 字体的颜色,但图案填充的前景色。

例如,如果用纯色填充单元格的背景 单元格的相关ForegroundColor对象的PatternFill属性 被设置为选择的纯色值,其中为BackgroundColor对象 设置为系统前景色。 {的PatternType属性 PatternFill对象设置为PatternValues.Solid

因此,要获得单元格背景的颜色值(实心填充),您必须分析 相关ForegroundColor对象的PatternFill属性。你必须 确定实例表示的“颜色类型”:

  1. 自动颜色和系统相关颜色
  2. 索引颜色。
  3. ARGB颜色(字母,红色,绿色和蓝色)
  4. 基于主题的颜色。
  5. 应用于颜色的色调值。
  6. 有关不同“颜色类型”的详细信息,请参阅以下内容 link

    请注意InnerTextForegroundColor的{​​{1}}属性的含义 class取决于颜色类型。例如,在基于主题的颜色的情况下BackgroundColor属性 被设置为InnerText集合的索引。

    以下示例打印电子表格文档中所有单元格的所有背景颜色信息:

    ColorScheme

答案 1 :(得分:1)

好吧,我有一个类似的用例,我需要测试将哪种 RGB 颜色作为背景颜色应用到单元格。只需从您的函数附加到代码,

backGroundColor = fill.PatternFill.BackgroundColor.Rgb.Value;
return backgroundColor;

这将返回单元格背景中使用的 Rgb 颜色值。