Формат файла .bin Office 2007 - Часть комментариев и рисунков

ОГЛАВЛЕНИЕ

Часть комментариев

Видимо, комментарии трудно хранить в модели книги. Хотя комментарии имеют свою собственную часть, на них нигде не ссылаются прямо. Лист, к которому предполагается прикрепление одного или больше комментариев, ссылается на устаревшую часть рисунка, разметку VML, описывающую сложную графическую структуру, которая как-то ухитряется установить связь с формой, чтобы нарисовать комментарии. Неясно, почему ожидается, что не только потребители/реализаторы BIN, но и потребители/реализаторы XML будут осмысленно работать с комментариями.

Ниже приведен пример части комментариев в XML и в BIN:

// Так часть комментариев выглядит в XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<comments
    xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/5/main">
  <authors>
    <author>Administrator</author>
  </authors>

  <commentList>
   <comment ref="C3" authorId="0">
     <text>
       <r>
         <rPr><b/><sz val="8"/>
         <color indexed="81"/><rFont val="Tahoma"/>
         <charset val="1"/></rPr>
         <t>Administrator:</t>
       </r>
       <r>
         <rPr><sz val="8"/>
         <color indexed="81"/><rFont val="Tahoma"/>
         <charset val="1"/></rPr>
         <t xml:space="preserve">_x000A_new comment</t>
       </r>
       <r>
         <rPr><sz val="11"/><color theme="1"/>
         <rFont val="Calibri"/><family val="2"/>
         <scheme val="minor"/></rPr>
         <t/>
       </r>
     </text>
   </comment>

  <comment ref="C5" authorId="0">
    <text>
      <r>
        <rPr><b/><sz val="8"/>
        <color indexed="81"/><rFont val="Tahoma"/>
        <charset val="1"/></rPr>
        <t>Administrator:</t>
      </r>
      <r>
        <rPr><sz val="8"/><color indexed="81"/>
        <rFont val="Tahoma"/>
        <charset val="1"/></rPr>
        <t xml:space="preserve">_x000A_a</t>
      </r>
      <r>
        <rPr><b/><sz val="8"/>
        <color indexed="10"/><rFont val="Tahoma"/>
        <family val="2"/></rPr>
        <t>noth</t>
      </r>
      <r>
        <rPr><sz val="8"/><color indexed="81"/>
        <rFont val="Tahoma"/><charset val="1"/></rPr>
        <t>er</t>
      </r>
      <r>
        <rPr><sz val="11"/><color theme="1"/><rFont val="Calibri"/>
    <family val="2"/>
        <scheme val="minor"/></rPr>
        <t/>
      </r>
    </text>
  </comment>
 </commentList>
</comments>

// Таким образом после разбиения части BIN на записи можно сопоставить
// записи с разметкой XML.

// Обратите внимание, что идентификаторы записей являются двумя байтами слева,
// связанная длина записи обрамлена круглыми скобками,
// а за ними идет само содержимое записи.


<comments>
f4 04 (00)

<authors>
f6 04 (00)

<author>Administrator</author>
f8 04 (1e) 0d 00 00 00 41 00 64 00 6d 00 69 00 6e 00 69 00 73 00 74
00 72 00 61 00 74 00 6f 00 72 00

</authors>
f7 04 (00)

<commentList>
f9 04 (00)

<comment ref="C3" authorId="0">
fb 04 (14) 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00

<text ...>
fd 04 (49) 01 1a 00 00 00 41 00 64 00 6d 00 69 00 6e 00 69 00 73 00 74
00 72 00 61 00 74 00 6f 00 72 00 3a 00 0a 00 6e 00 65 00 77 00 20 00
63 00 6f 00 6d 00 6d 00 65 00 6e 00 74 00 03 00 00 00 00 00 02 00 0e
00 01 00 1a 00 00 00

</comment>
fc 04 (00)

<comment ref="C5" authorId="0">
fb 04 (14) 00 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 02 00 00 00

<text ...>
fd 04 (49) 01 16 00 00 00 41 00 64 00 6d 00 69 00 6e 00 69 00 73 00 74
00 72 00 61 00 74 00 6f 00 72 00 3a 00 0a 00 61 00 6e 00 6f 00 74 00
68 00 65 00 72 00 05 00 00 00 00 00 02 00 0e 00 01 00 10 00 03 00 14
00 01 00 16 00 00 00

</comment>
fc 04 (00)

</commentList>
fa 04 (00)

</comments>
f5 04 (00)

Задействуются следующие записи:

//записи комментария
public const int BIFF12_COMMENTS        = 0x04F4;
public const int BIFF12_COMMENTS_END    = 0x04F5;
public const int BIFF12_AUTHORS         = 0x04F6;
public const int BIFF12_AUTHORS_END     = 0x04F7;
public const int BIFF12_AUTHOR          = 0x04F8;
public const int BIFF12_COMMENTLIST     = 0x04F9;
public const int BIFF12_COMMENTLIST_END = 0x04FA;
public const int BIFF12_COMMENT         = 0x04FB;
public const int BIFF12_COMMENT_END     = 0x04FC;
public const int BIFF12_TEXT            = 0x04FD;

Часть рисунков

Части рисунка хранятся в XML, но есть интересные правила:

•    Диграмма или форма ссылается на часть рисунка в листе таким образом:

<drawing r:id="rId1"/>

•    Комментарий ссылается на устаревшую часть рисунка в листе таким образом:

<legacyDrawing r:id="rId1"/>

•    Объект OLE ссылается на устаревшую часть рисунка и на встроенную часть в листе таким образом:

<drawing r:id="rId1"/>
<oleObjects>
  <oleObject progId="Paint.Picture" shapeId="1025" r:id="rId2"/>
</oleObjects>

•    Лист только ссылается на рисунок как на отдельную часть
•    Отдельная часть (drawings/drawingxxx.xml) не закодирована в BIN
•    Часть рисунка ссылается на диаграмму как на отдельную часть
•    Когда часть рисунка ссылается на объект ole, она также ссылается на медиа-объект (последняя отображенная картинка)
•    Часть диаграммы (charts/chartxxx.xml) не закодирована в BIN