gpt4 book ai didi

c# - 如何在 Open xml 中使用样式索引?

转载 作者:太空狗 更新时间:2023-10-29 18:21:34 26 4
gpt4 key购买 nike

谁能解释一下 OpenXml 中的样式索引是如何工作的?我有一个业务需求,我需要将背景颜色应用于 Excel 工作表中的某些单元格。并且某些样式已经应用于其他单元格。所以我需要决定我需要应用哪种样式的索引。

最佳答案

当您第一次看到 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 是 Styles 部分中 CellFormat 记录的从零开始的索引。

样式部分(又名工作簿的样式表)包含以下部分:

  • 编号格式
  • 字体
  • 填充
  • 边框
  • 单元格样式格式
  • 单元格格式 <== cell styleindex 指的是其中之一
  • 单元格样式
  • 差异格式
  • 表格样式
  • 颜色
  • 样式表扩展列表

现在在 CellFormat 记录中,有引用返回到样式表中的以下每个部分:

  1. 编号格式(上面第一个项目符号)
  2. 字体(上面第二个项目符号)
  3. 填写(上面的第三个项目符号)
  4. 边框(上面第四个项目符号)

代码中的示例单元格格式如下所示:

// 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 已经有 StyleIndex10

您需要执行以下步骤:

第 1 步。如果这是电子表格的新背景颜色,请将背景(也称为 Fill)添加到样式表的 Fill 部分(上面的第三个项目符号)包含您的新颜色。如果颜色已经存在,您需要找到并记住该颜色的现有 Fill 的索引。无论哪种方式,对于此示例,假设您需要的 Fill 索引是 25

第 2 步。创建一个新的 CellFormat,它是索引 10 处的 CellFormat 的副本。您将把这个新的 CellFormat 添加到 CellFormat 部分的末尾。假设新 CellFormat 的索引将为 53

第 3 步。更新索引 53 处的 CellFormat 并使其 Fill 索引属性为 25(来自第 1 步)。

最后一步:更新有问题的单元格 B3,以获得 53 的新 StyleIndex

注意:此答案适用于 Excel 中的非表格单元格样式 - 如果您需要表格单元格的样式信息,请回复,我会尝试更新或添加答案。

这个答案主要来 self 的经验以及对免费电子书第 73-79 页的解释: Open XML - The markup explained - Wouter van Vugt 着。对于所有 OpenXml 来说,这是一个很好的引用。

关于c# - 如何在 Open xml 中使用样式索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44839512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com