Индекс записи шрифта в BIFF8 начинается с нуля? - PullRequest
0 голосов
/ 18 марта 2020

Я программно читаю и записываю лист Excel, используя исходный код https://www.codeproject.com/articles/13852/basicexcel-a-class-to-read-and-write-to-microsoft, который, в свою очередь, основан на документации формата файла Excel из http://sc.openoffice.org/excelfileformat.pdf* , Первые два байта записи XF являются индексом записи FONT. Это все, что документация может сказать об этом.

Documentation of XF index to FONT

Мой вопрос: это индекс с нуля или индекс с 1?

Ниже приведен пример использования, который смутил меня и заставил задуматься над этим вопросом.

Вариант использования: полужирная ячейка

Я создал простой лист Excel: одна ячейка, содержащая текст это жирный шрифт.

Simple worksheet with one bold cell

Я программно читаю эту таблицу Excel и выгружаю все данные в удобочитаемый формат, используя новые методы dump (), которые я добавил к исходному коду. Я обнаружил, что:

  • Моя ячейка связана с записью LABELSST: <LabelSST rowIdx=0 colIdx=0 xfRecIdx=62 sstRecIdx=0 />
  • Эта запись LABELSST относится к записи XF с индексом: 62
  • Если это индекс, начинающийся с нуля, запись XF в индексе 62: <XF fontRecIdx=20 formatRecIdx=0 protect=0x1 align=0x20 rot=0 text=0 usedAttribs=0x8 borderLines=0 color1=0x2000000 color2=0x20c0 />
  • Эта запись XF ссылается на запись FONT с индексом: 20
  • Если это индекс на основе нуля, запись FONT с индексом 20: <Font height=220 options=0 colorIdx=9 weight=400 escType=0 uline=0 family=2 charSet=0 name="Calibri" />
  • Эта запись FONT имеет вес 400.

Этот шрифт весом 400 равен не что я ожидал. Если содержимое моей ячейки выделено жирным шрифтом, то вес шрифта должен быть 700, согласно документации.

Documentation of FONT weight

Однако, если запись XF относится к Запись FONT с индексом на основе 1, затем запись FONT с индексом на основе 1: <Font height=220 options=1 colorIdx=8 weight=700 escType=0 uline=0 family=2 charSet=0 name="Calibri" />

И эта запись FONT действительно имеет вес 700 для обозначения жирным шрифтом.

Это сбивает с толку. Я не знаю, должен ли индекс для записи FONT в записи XF считаться с нуля или с 1.

1 Ответ

0 голосов
/ 18 марта 2020

Мне кажется, я нашел ответ на свой вопрос в другом месте в документации http://sc.openoffice.org/excelfileformat.pdf.

Шрифт с индексом 4 опущен во всех версиях BIFF. Это означает, что первые четыре шрифта имеют индексы, начинающиеся с нуля, а пятый шрифт и все последующие шрифты имеют ссылки на индексы, основанные на одном.

Если это так, то данные, которые я наблюдал, имеют больше смысла .

...