第4章 SpreadsheetML

Chart

Excelでデータを基にグラフを作成、挿入するとパーツが作成されます。この場合に作成されるパーツは、drawingsフォルダに作成される描画フレームを定義したパーツと、chartsフォルダに作成されるチャートのデータ定義の2つがあります。

この2種類のパーツはいずれもDrawingMLを使って定義されています。

追加されたパーツ
追加されたパーツ

drawingのパーツは、シート単位に作成されます。シート1つにつき1つのdrawingのパーツが作成され、drawing1.xml、drawing2.xmlのように番号が付加されます。ただし、ワークシートのパーツファイルの番号とこの番号が同じとは限りません。シートの関連付けファイルでシートとdrawingのパーツが結び付けられます。

グラフのデータとなるチャートのパーツは、チャートごとに作成されます。したがって、1つのシートに2つのグラフが挿入されている場合は、drawingのパーツが1つ、チャートのパーツが2つ作成されます。

以降、実際にワークシートにグラフを挿入した場合の内容を順に説明します。

ここではワークブックの1ページ目のワークシートにグラフを挿入したと想定します。シートのパーツはsheets/sheet1.xmlと仮定します。

シートにグラフを挿入すると、sheet1.xmlには描画データを示すdrawing要素が追加されます。drawing要素はworksheet要素の子要素で、ワークシートのセルデータの部分にはグラフや描画の情報は追加されません。

sheet1.xml
<drawing r:id="rId2"/>

drawing要素には関連付けIDがあるのみです。このワークシートの関連付けであるsheets/_rels/sheet1.xml.relsファイルを見ると、関連付けIDで参照される描画フレームのパーツのURIが分かります。

sheets/_rels/sheet1.xml.rels
<Relationship Id="rId2"
                  Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing"
                  Target="../drawings/drawing1.xml"/>

drawing1.xmlはDrawingMLを使って定義されます。その内容は、挿入されたグラフのための描画フレームの定義とグラフを作成するための元データのセルの情報です。

drawing1.xml
<xdr:wsDr
        xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
        xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
  <xdr:twoCellAnchor> 
    <xdr:from> 
      <xdr:col>3</xdr:col>
      <xdr:colOff>83820</xdr:colOff>
      <xdr:row>2</xdr:row>
      <xdr:rowOff>0</xdr:rowOff>
    </xdr:from>
    <xdr:to>
      <xdr:col>7</xdr:col>
      <xdr:colOff>868680</xdr:colOff>
      <xdr:row>17</xdr:row>
      <xdr:rowOff>114300</xdr:rowOff>
    </xdr:to>
    <xdr:graphicFrame macro="">
      <xdr:nvGraphicFramePr>
        <xdr:cNvPr id="3" name="グラフ 2"/>
        <xdr:cNvGraphicFramePr/>
      </xdr:nvGraphicFramePr>
      <xdr:xfrm>
        <a:off x="0" y="0"/>
        <a:ext cx="0" cy="0"/>
      </xdr:xfrm>
      <a:graphic>
        <a:graphicData
          uri="http://schemas.openxmlformats.org/drawingml/2006/chart">
          <c:chart
            xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
            xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
            r:id="rId1"/>
        </a:graphicData>
      </a:graphic>
    </xdr:graphicFrame>
    <xdr:clientData/>
  </xdr:twoCellAnchor>
</xdr:wsDr>

このようにdrawingパーツの内容は、DrawingMLのspreadsheedDrawingのカテゴリに分類される要素で定義されています。

twoCellAnchor要素は、オブジェクトがどのセルに対して割り当てられたものかをfrom要素とto要素で指定します。graphicFrame要素のなかで画像オブジェクトの定義がされています。

描画されたグラフは、graphicData要素の中にチャートとして参照する関連付けIDが定義されています。

チャートを参照するgraphicData
<c:chart
 xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
 xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
                                                                          r:id="rId1"/>

drawingsフォルダには、drawing1.xmlのための関連付けファイル_rels/drawing1.xml.relsがあります。

_rels/drawing1.xml.rels
<Relationship Id="rId1"
 Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"
 Target="../charts/chart1.xml"/>

chart1.xmlには、描画されるチャートの定義データがあります。このパーツもDrawingMLの一部であるchartのカテゴリーに分類される要素で定義されます。

chart1.xmlの内容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
  xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
  xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <c:lang val="ja-JP"/>
   <c:chart> 
   <c:title>
     <c:layout/>
   </c:title>
   <c:plotArea>
   <c:layout/>
   <c:pieChart>
   <c:varyColors val="1"/>
   <c:ser> 
   <c:idx val="0"/>
   <c:order val="0"/>
   <c:tx>
     <c:strRef>
       <c:f>月間家計簿!$B$6</c:f>
         <c:strCache>
           <c:ptCount val="1"/>
           <c:pt idx="0">
             <c:v>見積コスト</c:v>
           </c:pt>
         </c:strCache>
       </c:strRef>
    </c:tx>
 ...