XML Spreadsheet の中身調査

プログラムで Excel のファイルを生成する場合、一般的には Excel のプラグインなどを入れて実装します。サーバーに Office 入れるとサーバーサイドで Excel を起動させてファイル生成なども可能ですが、ライセンスも必要です。

もっと簡単にできる方法として、XML Spreadsheet 形式があります。これは最近の Office であればついてくるのですが、一定の形式に従って XML ファイルを生成すると Excel で開けるようになります。

ファイルを生成した後、エクスプローラーでファイルを見てみると、以下のようにアイコンが Excel 形式に変化します。拡張子は XML のままです。これをダブルクリックすると Excel が開きます。

この中身をテキストエディタで見てみましょう。

一見したところでは XML ファイルです。各行を解説します。

<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>

このファイルの2行目がポイントです。これがあるので Excel が反応しています。なお、ここを変更すると Word や PowerPoint が反応します。

<Workbook
    xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

Excel Spreadsheet の名前空間を宣言しています。以降の名前空間の無い要素はすべて、「urn:schemas-microsoft-com:office:spreadsheet」に属するものとしています。ss:ですが、型の属性「ss:Type」で使用します。同じ名前空間なので必要無い気もしますが、無いと Excel でエラーになるので属性用に宣言しています。

    <Styles>
        <Style ss:ID="DateTime"><NumberFormat ss:Format="yyyy/m/d;@"/></Style>
        <Style ss:ID="Currency"><NumberFormat ss:Format="&quot;¥&quot;#,##0;&quot;¥&quot;\-#,##0"/></Style>
        <Style ss:ID="Period3"><NumberFormat ss:Format="#,##0.000_ "/></Style>
        <Style ss:ID="Period4"><NumberFormat ss:Format="#,##0.0000_ "/></Style>
    </Styles>

ここでは書式を設定できます。書式名を登録しておき、セル部分で適用させたい ID を指定します。

    <Worksheet ss:Name="シート名">
        <Table>
            <Row ... />
    </Worksheet>
</Workbook>

個別のワークシートを定義します。ss:Name でシート名を指定します。

            <Row>
                <Cell><Data ss:Type="String">日付型</Data></Cell>
                <Cell><Data ss:Type="String">通貨型</Data></Cell>
                <Cell><Data ss:Type="String">数値型</Data></Cell>
                <Cell><Data ss:Type="String">文字型</Data></Cell>
            </Row>
            <Row>
                <Cell ss:StyleID="DateTime"><Data ss:Type="DateTime">2021-01-01</Data></Cell>
                <Cell ss:StyleID="Currency"><Data ss:Type="Number">4000</Data></Cell>
                <Cell ss:StyleID="Period3"><Data ss:Type="Number">3000</Data></Cell>
                <Cell><Data ss:Type="String">あいうえお</Data></Cell>
            </Row>

実際のセル部分です。HTML のテーブルタグの要領で書いていきます。

実際に開くと以下のようになります。ダブルクリックで開くはずですが、関連付けが変更されたなどで開かない場合は、右クリック「編集」でも開きます。

このように、Excel で見えるようになります。

難点としては、データ量が多くなると XLSX よりもファイルサイズが大きくなります。もっとも XLSX 形式は他形式の XML ファイルの集まりで、複数のファイルを ZIP ファイルで圧縮されたものです。これについては別稿で紹介します。

また、オンライン上でファイルを共有する場合などを考慮して、Google Spreadsheet のほうがいい場合もあります。これはケースバイケースで使い分けることになります。