第4章 SpreadsheetML

comment

Excelでは、コメントを挿入してセルにメモを追加することができます。このとき、コメントの内容はコメント用のパーツに保存されます。

セルにコメントを追加する
セルにコメントを追加する

Excelではコメントパーツはワークブックと同じxlフォルダ下に作成されます。コメントのパーツはシート単位に作成され、comment1.xml、comment2.xmlという具合にcommentn.xml(nは整数)というファイル名になります。

このときの番号は、シートの番号と必ずしも一致しません。例えば、シートが3つあって、順にsheet1.xml、sheet2.xml、sheet3.xmlとなっていたとします。sheet2とsheet3でコメントを作成した場合、作成されるコメントパーツのファイル名はcomment1.xmlとcomment2.xmlになります。

sheet2とsheet3でコメントを作成したときのxlフォルダ
sheet2とsheet3でコメントを作成したときのxlフォルダ

SpreadsheetMLのコメントパーツは次のような構造になっています。

コメントパーツの構造
コメントパーツの構造

comments要素をルートとしてauthors要素とcommentList要素があります。authors要素はコメント作者の情報がauthor要素によって列挙されます。

commentList要素の中にcomment要素によってコメントが列挙されます。1つのcomment要素が1つのコメントを表します。

comennt要素はauthorId属性とref属性を持っています。authorId属性には、author要素のインデックスが、ref属性にはセルのリファレンスが指定されています。

comment要素の子要素のtext要素にコメントが格納されますが、text要素の構造は次のようになっています。

t要素の内容がコメントのテキストデータです。text要素の子要素としてt要素が現れる場合と、テキストデータはRunとして(レイアウトプロパティを伴って)r要素が現れる場合があります。

サンプルで示した1件分のコメントパーツは次のようになっています。

comments1.xml
<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <authors>
    <author xml:space="preserve"> </author>
  </authors>
  <commentList>
    <comment ref="B5" authorId="0">
      <text>
        <r>
          <rPr>
            <sz val="9"/>
            <color indexed="81"/>
            <rFont val="MS Pゴシック"/>
            <family val="3"/>
            <charset val="128"/>
          </rPr>
          <t>※コードNOと摘要、単価を、セルB5からセルD54に設定したコードマスターを入力し
てください。
コードNOは重複しないように設定してください。</t>
        </r>
      </text>
    </comment>
  </commentList>
</comments>

コメントが挿入されているワークシートのデータを見ると、ワークシートのsheetDataにはコメントに関する情報は何も書かれていません。コメントはワークシートから完全に分離された形になっています。ワークシートとコメントは関連付けファイルによって結び付けられます。

worksheets/_relsフォルダにワークシートごとの関連付けファイルがあります。

worksheets/_rels
worksheets/_rels

このサンプルではコメントを挿入したsheet2.xmlの関連付けファイルはsheet2.xml.relsです。このファイルにはコメントのパーツが作成された時点で次の要素が追加されています。

sheet2.xml.rels
<Relationship Id="rId3"
                  Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"
                  Target="../comments1.xml"/>

ここから、このシートにはコメントが挿入されていて、コメントのパーツが../comments1.xmlであるということになります。