c# - 打开 Xml 样式颜色未正确显示
问题描述
我正在使用 OpenXml for Office SDK 创建电子表格。我无法让单元格背景颜色正常工作。我尝试将背景颜色应用于显示为黑色的任何单元格。
这是我生成的 xml 的摘录:
<x:styleSheet xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" mc:Ignorable="x14ac x16r2 xr" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:fonts count="10">
<x:font>
<x:sz val="14" />
<x:name val="Calibri" />
</x:font>
<x:font>
<x:sz val="12" />
<x:name val="Calibri" />
</x:font>
<x:font>
<x:sz val="12" />
<x:name val="Arial" />
</x:font>
<x:font>
<x:sz val="10" />
<x:name val="Calibri" />
</x:font>
<x:font>
<x:sz val="9" />
<x:name val="Arial" />
</x:font>
<x:font>
<x:sz val="10" />
<x:name val="Century Schoolbook" />
</x:font>
<x:font>
<x:sz val="11" />
<x:name val="Times New Roman" />
</x:font>
<x:font>
<x:sz val="11" />
<x:name val="Arial" />
</x:font>
<x:font>
<x:sz val="10" />
<x:name val="Arial" />
</x:font>
<x:font>
<x:sz val="11" />
<x:name val="Calibri" />
</x:font>
</x:fonts>
<x:fills count="9">
<x:fill>
<x:patternFill patternType="none" />
</x:fill>
<x:fill>
<x:patternFill patternType="gray125" />
</x:fill>
<x:fill>
<x:patternFill patternType="solid">
<x:bgColor rgb="FFFF9900" />
</x:patternFill>
</x:fill>
<x:fill>
<x:patternFill patternType="solid">
<x:bgColor rgb="FFFFCC99" />
</x:patternFill>
</x:fill>
<x:fill>
<x:patternFill patternType="solid">
<x:bgColor rgb="FF000000" />
</x:patternFill>
</x:fill>
<x:fill>
<x:patternFill patternType="solid">
<x:bgColor rgb="FFFFFF99" />
</x:patternFill>
</x:fill>
<x:fill>
<x:patternFill patternType="solid">
<x:bgColor rgb="FFFFCC00" />
</x:patternFill>
</x:fill>
<x:fill>
<x:patternFill patternType="solid">
<x:bgColor rgb="FFC0C0C0" />
</x:patternFill>
</x:fill>
<x:fill>
<x:patternFill patternType="solid">
<x:bgColor rgb="FFFFFF00" />
</x:patternFill>
</x:fill>
</x:fills>
<x:borders count="1">
<x:border>
<x:left />
<x:right />
<x:top />
<x:bottom />
<x:diagonal />
</x:border>
</x:borders>
<x:cellStyleXfs count="1">
<x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" />
</x:cellStyleXfs>
<x:cellXfs count="23">
<x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" />
<x:xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="1" fillId="1" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="2" fillId="1" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="3" fillId="3" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="4" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="4" fillId="5" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="4" fillId="6" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="8" fillId="7" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="8" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="9" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" />
<x:xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="0" fillId="2" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="4" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="5" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="2" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="6" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="7" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="8" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="9" fillId="4" borderId="0" xfId="0" applyFont="1" applyFill="1" />
<x:xf numFmtId="0" fontId="9" fillId="8" borderId="0" xfId="0" applyFont="1" applyFill="1" />
</x:cellXfs>
<x:cellStyles count="1">
<x:cellStyle name="Normal" xfId="0" builtinId="0" />
</x:cellStyles>
<x:dxfs count="0" />
<x:tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16" />
<x:extLst>
<x:ext xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}">
<x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1" />
</x:ext>
<x:ext xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" uri="{9260A510-F301-46a8-8635-F512D64BE5F5}">
<x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1" />
</x:ext>
</x:extLst>
</x:styleSheet>
用于生成它的代码如下所示:
fillList 只是一个 List 如果 Colors
Fills fillsNode = new Fills() { Count = GetUint(_fillList.Count)};
foreach (System.Drawing.Color color in _fillList) {
fillsNode.AppendChild(GetFill(color.R, color.G, color.B));
}
stylesheet1.Append(fillsNode);
这些函数用于创建 Fill 对象并将 r、g 和 b 值转换为格式化的十六进制字符串。这是我怀疑我可能出错的地方之一。
private Fill GetFill(int r, int g, int b) {
PatternFill pf1 = new PatternFill { PatternType = PatternValues.Solid };
pf1.Append(new BackgroundColor() { Rgb = GetHexStringFromRgb(r, g, b)});
Fill f1 = new Fill();
f1.Append(pf1);
return f1;
}
private string GetHexStringFromRgb(int r, int g, int b) {
return $"FF{r.ToString("X2")}{g.ToString("X2")}{b.ToString("X2")}";
}
任何帮助,将不胜感激。
解决方案
推荐阅读
- nativescript - 无法构建 IOS - 命令 xcodebuild 失败,退出代码为 65
- c# - 如何在 C# 中正确编写 sobel 代码?
- python - 不同数据字节格式的含义
- python - Python:如何从使用 iSpring 创建的 html 中获取音频源
- spring-boot - NoSuchElementException:不存在值
- python - 如何定期发送请求以更新 Python websocket-client 连接中的 listenKey 值(Python-Binance)
- java - 数组元素可以等于整数的名称而不是值吗?
- c++ - 是否可以使用在另一个 C++ 库中声明的静态变量
- python - 在Python中从二维数组(列表列表)中删除字符串列表的有效方法?
- .net - 无法加载文件或程序集“System.ServiceModel.Primitives,版本=4.5.0.4,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”