【问题标题】:Is a font record index in BIFF8 zero-based?BIFF8 中的字体记录索引是从零开始的吗?
【发布时间】:2020-06-29 17:27:02
【问题描述】:

我正在使用https://www.codeproject.com/articles/13852/basicexcel-a-class-to-read-and-write-to-microsoft 的源代码以编程方式读写Excel 工作表,而源代码又基于http://sc.openoffice.org/excelfileformat.pdf 的Excel 文件格式文档。

源代码支持的 Excel 文件格式为 Binary Interchange File Format version 8 (BIFF8)。

Excel 文件中的一条记录是扩展格式 (XF) 记录。 XF 记录的前两个字节是 FONT 记录的索引。这就是文档要说的所有内容。

我的问题:这是从零开始的索引还是从 1 开始的索引?

以下是一个让我困惑并引导我思考这个问题的用例。

用例:粗体单元格

我创建了一个简单的 Excel 工作表:一个包含粗体文本的单元格。

我使用添加到源代码中的新 dump() 方法以编程方式读取该 Excel 工作表并将所有数据转储为人类可读的格式。我发现:

  • 我的单元格与 LABELSST 记录相关联:<LabelSST rowIdx=0 colIdx=0 xfRecIdx=62 sstRecIdx=0 />
  • 该 LABELSST 记录引用索引为:62 的 XF 记录
  • 如果是从零开始的索引,则索引 62 处的 XF 记录为:<XF fontRecIdx=20 formatRecIdx=0 protect=0x1 align=0x20 rot=0 text=0 usedAttribs=0x8 borderLines=0 color1=0x2000000 color2=0x20c0 />
  • 该 XF 记录指的是索引为:20 的 FONT 记录
  • 如果是从零开始的索引,则索引 20 处的 FONT 记录为:<Font height=220 options=0 colorIdx=9 weight=400 escType=0 uline=0 family=2 charSet=0 name="Calibri" />
  • 该 FONT 记录的权重为 400。

400 的字体粗细不是我的预期。如果我的单元格内容是粗体,那么根据文档,字体粗细应该是 700。

但是,如果 XF 记录引用具有从 1 开始的索引的 FONT 记录,则从 1 开始的索引 20 处的 FONT 记录为:<Font height=220 options=1 colorIdx=8 weight=700 escType=0 uline=0 family=2 charSet=0 name="Calibri" />

而且那个 FONT 记录确实有 700 的权重来表示粗体。

这令人困惑。我不知道 XF 记录中 FONT 记录的索引应该是从零开始还是从 1 开始。

【问题讨论】:

    标签: c++ excel fonts openoffice-calc


    【解决方案1】:

    我想我在 http://sc.openoffice.org/excelfileformat.pdf 文档的其他地方找到了我自己问题的答案。

    在所有 BIFF 版本中都省略了索引为 4 的字体。这意味着前四种字体的索引从零开始,第五种字体和所有后续字体都使用从一开始的索引。

    如果这是真的,那么我观察到的数据就更有意义了。

    【讨论】:

      猜你喜欢
      • 2011-03-26
      • 2018-12-01
      • 1970-01-01
      • 2012-12-29
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多