Формат файла .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