如何在Open xml中使用样式索引?
任何人都可以解释OpenXml中的样式索引如何工作? 我有业务需求,我需要将背景颜色应用于Excel工作表中的某些单元格。 并且某些样式已经应用于其他单元格。 所以我需要决定我需要应用哪种样式的索引。
第一眼看它时,OpenXML样式可能会令人困惑。 Excel文档样式属于SpreadsheetML
标记语言,与Word和PowerPoint不同。
对于Excel中的典型单元格,唯一需要的样式信息是StyleIndex(如您所指出的)。
Cell cell16 = new Cell(){ CellReference = "HU1", StyleIndex = (UInt32Value)1U, DataType = CellValues.SharedString };
这对应于XML中的s属性:
0
StyleIndex
是样式部分中CellFormat
记录的从零开始的索引。
样式部分(也称为工作簿的样式表)包含以下部分:
- 编号格式
- 字体
- 填充
- 国界
- 单元格样式
- Cell格式<== cell styleindex指的是其中之一
- 细胞样式
- 差分格式
- 表格样式
- 颜色
- 样式表扩展列表
现在在CellFormat
记录中,有一些引用可以引用回样式表中的以下每个部分:
- 编号格式(上面的第一个子弹)
- 字体(上面的第二个子弹)
- 填充(上面的第三个子弹)
- 边界(上面的第四个子弹)
代码中的示例单元格格式如下所示:
// this line is important to your question CellFormat cellFormat5 = new CellFormat(){ NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)11U, //the rest of the CellFormat definition is not so important to your question FormatId = (UInt32Value)0U, ApplyFill = true, ApplyBorder = true, ApplyAlignment = true };
要回答您的问题: 将某种背景颜色应用于某些细胞 。 假设我们要更新电子表格的单元格B3
,而B3
StyleIndex
已经为10
。
您需要按照以下步骤操作:
步骤1.如果这是电子表格的新背景颜色,请将背景(也称为Fill
)添加到包含新颜色的样式表(上面的第三个项目符号)的“ Fills
部分。 如果颜色已存在,则需要查找并记住该颜色的现有Fill
的索引。 无论哪种方式,对于这个例子,我们可以说你需要的Fill
指数是25
。
步骤2.创建一个新的CellFormat
,它是索引为10
的CellFormat
的副本。 您将把这个新的CellFormat
添加到CellFormat
部分的末尾。 让我们说新的CellFormat
的索引将是53
。
步骤3.更新索引53
处的CellFormat
并使其Fill
索引属性为25
(从步骤1开始)。
最后一步:更新问题B3
的单元格,使新的StyleIndex
为53
注意 :此答案适用于Excel中的非表格单元格样式 – 如果您需要表格单元格的样式信息,请回复并尝试更新或添加答案。
这个答案主要来自我的经验以及对免费电子书第73-79页的解释: Open XML – 标记解释 – 由Wouter van Vugt撰写。 它是用于所有OpenXml的很好的参考。