如何在 Open xml 中使用样式索引?
How to work with style Index in Open xml?
谁能解释一下 OpenXml 中的样式索引是如何工作的?
我有一个业务需求,我需要将背景颜色应用于 excel sheet 中的某些单元格。并且某些样式已经应用于其他单元格。所以我需要决定我需要应用哪种样式索引。
OpenXML 样式在您初看时可能会感到困惑。 Excel 文档样式属于 SpreadsheetML
标记语言,不同于 Word 和 PowerPoint..
对于 Excel 中的典型单元格,唯一需要的样式信息是 StyleIndex(如您所指出的)。
Cell cell16 = new Cell(){ CellReference = "HU1", StyleIndex = (UInt32Value)1U, DataType = CellValues.SharedString };
这对应于XML中的s属性:
<x:c r="HU1" s="1" t="s">
<x:v>0</x:v>
</x:c>
StyleIndex
是样式部分中 CellFormat
记录的从零开始的索引。
样式部分(又名工作簿的样式表)包含以下部分:
- 编号格式
- 字体
- 填充
- 边框
- 单元格样式格式
- 单元格格式<== 单元格样式索引指的是其中一种格式
- 单元格样式
- 差异格式
- Table 样式
- 颜色
- 样式表扩展列表
现在在 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
,以获得 53
的新 StyleIndex
注意:此答案适用于 Excel 中的非 table 单元格样式 - 如果您需要 table 单元格的样式信息,请回复,我会尝试更新或添加答案。
这个答案主要来自我的经验以及对免费电子书第 73-79 页的解释:Open XML - The markup explained - Wouter van Vugt。对于所有 OpenXml 都是很好的参考。
谁能解释一下 OpenXml 中的样式索引是如何工作的? 我有一个业务需求,我需要将背景颜色应用于 excel sheet 中的某些单元格。并且某些样式已经应用于其他单元格。所以我需要决定我需要应用哪种样式索引。
OpenXML 样式在您初看时可能会感到困惑。 Excel 文档样式属于 SpreadsheetML
标记语言,不同于 Word 和 PowerPoint..
对于 Excel 中的典型单元格,唯一需要的样式信息是 StyleIndex(如您所指出的)。
Cell cell16 = new Cell(){ CellReference = "HU1", StyleIndex = (UInt32Value)1U, DataType = CellValues.SharedString };
这对应于XML中的s属性:
<x:c r="HU1" s="1" t="s">
<x:v>0</x:v>
</x:c>
StyleIndex
是样式部分中 CellFormat
记录的从零开始的索引。
样式部分(又名工作簿的样式表)包含以下部分:
- 编号格式
- 字体
- 填充
- 边框
- 单元格样式格式
- 单元格格式<== 单元格样式索引指的是其中一种格式
- 单元格样式
- 差异格式
- Table 样式
- 颜色
- 样式表扩展列表
现在在 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
,以获得 53
StyleIndex
注意:此答案适用于 Excel 中的非 table 单元格样式 - 如果您需要 table 单元格的样式信息,请回复,我会尝试更新或添加答案。
这个答案主要来自我的经验以及对免费电子书第 73-79 页的解释:Open XML - The markup explained - Wouter van Vugt。对于所有 OpenXml 都是很好的参考。