Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2010年03月03日] [更新 2019年04月27日] エクセル操作フォームEx
エクセル操作フォームEx   参考コード類
Excel 2007 - xlsx 形式ブックの構造
動作確認等 Excel 2007







Excel 2007 - xlsx 形式ブックの構造


エクセルは 2007 になって,ブックの保存形式が大きく変更となりました.拡張子は xlsx です.
このファイルは zip 形式のファイルです.xlsx で保存したファイルの拡張子を zip に変更するとその構造を見ることができます.ただし,圧縮解凍アプリによっては解凍閲覧できない場合があります.
Window XP 以降では,zip, cab 等のファイル内も検索して展開表示する機能があります.この機能を有効にしていると,エクスプローラの展開表示が非常に遅くなるため,無効にしている方が多いと思いますが,Windows XP であれば以下の方法でこれを有効にすると表示できます.Vista 以降ではレジストリの操作が必要です.
  • zip ファイル検索を有効にするには,コマンドラインから regsvr32 zipfldr.dll を実行
  • zip ファイル検索を無効にするには,コマンドラインで regsvr32 /u zipfldr.dll を実行
  • 参考までに,cab ファイルの場合は regsvr32 cabview.dll と regsvr32 /u cabview.dll
この操作を行うと,圧縮解凍アプリの拡張子関連の設定が無効となる場合があります.再設定が必要となるかも知れません.
Excel 2007 のブックの拡張子を zip に変更しても,Excel 2007 にドラッグ・ドロップすれぱそのブックを開くことができます.


[備考]
下の XML コードは,サンプルプログラム集の [921] [03_XML コードの整形] のプログラムを使用して整形しています.


図1
xlsx ブックの拡張子を変更
  • ここではコピーして変更
図2
ブックの構造
  • xml で格納されている

リスト1
shareStrings.xml の内容
これを編集して保存すればエクセルで表示可能 (文字コードは UTF-8)
<?xml version="1.0" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="61" 
  uniqueCount="17">
  <si>
    <t>期末テスト成績表</t>
    <rPh sb="0" eb="2">
      <t>キマツ</t>
    </rPh>
    <rPh sb="5" eb="8">
      <t>セイセキヒョウ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>数学</t>
    <rPh sb="0" eb="2">
      <t>スウガク</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>物理</t>
    <rPh sb="0" eb="2">
      <t>ブツリ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>国語</t>
    <rPh sb="0" eb="2">
      <t>コクゴ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>歴史</t>
    <rPh sb="0" eb="2">
      <t>レキシ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>宮本 武蔵</t>
    <rPh sb="0" eb="2">
      <t>ミヤモト</t>
    </rPh>
    <rPh sb="3" eb="5">
      <t>ムサシ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>佐々木 小次郎</t>
    <rPh sb="0" eb="3">
      <t>ササキ</t>
    </rPh>
    <rPh sb="4" eb="7">
      <t>コジロウ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>赤垣 源蔵</t>
    <rPh sb="0" eb="1">
      <t>アカ</t>
    </rPh>
    <rPh sb="1" eb="2">
      <t>カキ</t>
    </rPh>
    <rPh sb="3" eb="5">
      <t>ゲンゾウ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>沓掛 時次郎</t>
    <rPh sb="0" eb="1">
      <t>クツ</t>
    </rPh>
    <rPh sb="1" eb="2">
      <t>カケ</t>
    </rPh>
    <rPh sb="3" eb="4">
      <t>トキ</t>
    </rPh>
    <rPh sb="4" eb="6">
      <t>ジロウ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>清水 次郎長</t>
    <rPh sb="0" eb="2">
      <t>シミズ</t>
    </rPh>
    <rPh sb="3" eb="5">
      <t>ジロウ</t>
    </rPh>
    <rPh sb="5" eb="6">
      <t>チョウ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>近藤 勇</t>
    <rPh sb="0" eb="2">
      <t>コンドウ</t>
    </rPh>
    <rPh sb="3" eb="4">
      <t>イサ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>年度計</t>
    <rPh sb="0" eb="2">
      <t>ネンド</t>
    </rPh>
    <rPh sb="2" eb="3">
      <t>ケイ</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>平均得点</t>
    <rPh sb="0" eb="1">
      <t>ヒラ</t>
    </rPh>
    <rPh sb="1" eb="2">
      <t>ヒトシ</t>
    </rPh>
    <rPh sb="2" eb="4">
      <t>トクテン</t>
    </rPh>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>平成21年度 第1四半期</t>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>平成21年度 第2四半期</t>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>平成21年度 第3四半期</t>
    <phoneticPr fontId="2"/>
  </si>
  <si>
    <t>平成21年度 第4四半期</t>
    <phoneticPr fontId="2"/>
  </si>
</sst>




xlsx 形式ブックの解凍・展開操作


Excel 2007 以降のブックは zip 形式のファイルです.ZIP 書庫として操作すれば閲覧あるいは解凍・展開することができます.
下記の最初のリンクの記事に .xlsx 形式のブックを展開した例があります.次のリンクの記事はブックから画像だけを取り出すサンプルです.クリップボードのデータを取得しています.展開には,Delphi XE2 で実装された TZipFile を使用しています.
3 番目のリンクの記事のように,展開後に XML の操作で情報を取り出すこともできます.


ZIP 書庫は解凍展開してディクスに保存しなくても操作できます.





拡張子が .xlsx, docx, pptx のファイルの直接操作


Excel 2007 以降のブックは,前述のような Open XML の仕様に基づいた内容となっています.
この XML を操作するための Open XML SDK というライブラリをマイクロソフトが提供しています.しかし,このライブラリは .NET の開発言語専用のライブラリです.

Delphi で .xlsx のブックを直接操作するためのライブラリとして,例えば以下のものがあります.これらのライブラリは,XML コード,つまり,エクセルのブックの直接操作ですから,システムにエクセルがインストールされていなくても処理できます.しかも処理は高速です.もちろん,エクセルそのものの機能は利用できません.
Direct Office は,docx, .pptx ファイルの操作も可能です.



[備考]
Direct Office のソースコードは 80 万行以上あります.そのため,最初のコンパイルにはかなり時間がかかります.2 回目以降は,コンパイル済みのユニットファイル (.dcu) が作成されているので高速にコンパイルできます.


CreateOleObject 関数で生成したエクセルのオブジェクトも,TExcelApplication コンポーネントで生成したエクセルのオブジェクトも,非表示の状態で操作すれば,見かけ上はディクス上のファイルを直接操作しているのと同じです・