XMLをOfficeで扱う: CSVファイルをExcelでXMLファイルに変換

2004年05月09日(日)更新


■ CSVファイルをXMLファイルに変換

たけち: これまでは、【kajin.xml】ファイルをExcelで読み込んで【kajin.csv】に変換してみたね。

さらら: えぇ。できたkajin.csvは次のようなものだったわね。

CSVファイル【kajin.csv】

id,name,age,address
1,大伴家持,36,yakamochi@example.com
2,額田王,28,nukata@example.com
3,柿本人麻呂,45,hitomaro@example.com

たけち: そうだったね。で、今回は、その逆にExcelを使って、CSVからXMLへ変換する方法を勉強しようね。

さらら: は〜い。ということは、【kajin.csv】から【kajin.xml】へ変換するということね。

たけち: そうだね。そこでまず基本的な考え方を見ておこう。まず、CSVも含めて、表の形式をとるデータでは、どういうフィールドがどういう順番で並んでいるのか、といった情報が基本になっているよね。

さらら: えぇ。

たけち: XMLの場合は、フィールドにあたるのが要素と属性だね。要素の順番という情報だけではなくて、ある情報を属性にするとか、要素や属性のツリー上の位置はどうするのか、といったスキーマ情報が必要になるよね。

さらら: それはそうよね。属性にしたいものが要素になってしまったら困るわけだし。そうね、XMLの場合は、CSVよりも複雑なスキーマが要るのね。


■変換時のXMLスキーマ

たけち: ということは、CSVからXMLへ変換する際には、変換したいXMLのスキーマ情報が必要になってくるよね。

さらら: えぇ。。。でも、具体的にはどうしたらいいの?

たけち: XMLのスキーマ情報が必要なときには、何があればいい?

さらら: XMLのスキーマ情報が必要なときには。。。あっ、XML Schema!! (^ ^;

たけち: そうだね。前回書いた【kajin.xml】に対応するXML Schemaファイル【kajin.xsd】をここでも用意しておこうね。

XMLスキーマサンプル【kajin.xsd】

<?xml version="1.0" encoding="Shift_JIS"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="meibo" type="MeiboType">
    <xsd:key name="person-id">
        <xsd:selector xpath="person" />
        <xsd:field xpath="@id" />
    </xsd:key>
</xsd:element>

<xsd:complexType name="MeiboType">
    <xsd:sequence>
        <xsd:element ref="person" maxOccurs="unbounded" />
    </xsd:sequence>
</xsd:complexType>

<xsd:element name="person" type="PersonType" />

<xsd:complexType name="PersonType">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:string" />
        <xsd:element name="age" type="xsd:positiveInteger" />
        <xsd:element name="address" type="xsd:string" />
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:positiveInteger" use="required" />
</xsd:complexType>

</xsd:schema>


■【kajin.csv】をExcelで開く

たけち: XML Schemaファイルの用意ができたところで、【kajin.csv】を開けてみようね。

さらら: そういえば【kajin.csv】って、テキストエディタで読み書きできるのに、アイコンの形がExcel風なのね

たけち: そうだね。WindowsでExcel 2003がインストールされている状態では、特に「フォルダオプション」の「ファイルタイプ」をいじらなければ、CSVのアイコンはこんな形になるんだ。そしてこれをダブルクリックするとExcelが立ち上がって、このデータが読み込まれるんだよ。

さらら: じゃあ、そうしてみるわね。これをダブルクリックと…あ、ちゃんと立ち上がって表示されたわ。

【kajin.csv】をExcelで開く


■【kajin.xsd】を読み込む

たけち: ここまでできたら、次はXML Schemaを読み込むことにしよう。まず「データ」メニューの「XML」→「XMLソース」を選んでね。

さらら: はい。あっ、右側に「XMLソース」というコーナーが出てきたわ。

XMLソース

たけち: その右下の[XMLの対応付け]ボタンを押して。

さらら: はい。[XMLの対応付け]押してっと。。。。何かダイアログが出てきたわね。

ダイアログ

たけち: そのダイアログの下にある[追加]ボタンを押して。

さらら: はい。[追加]ボタンを押してっと・・・・・普通のファイルダイアログが出てきたわ。

ファイルダイアログ

たけち: そこで、【kajin.xsd 】のあるフォルダまで行って、【kajin.xsd】を選んでから「開く」のボタンを押してね。

さらら: はい。[開く]を押したら…「指定したXMLスキーマには複数のルートノード※注-1が含まれています」と出てきたわ。

複数ルート

たけち: そうだね。【kajin.xsd】の書き方だと、meiboでもpersonでもルート要素になってよい書き方だったからね。ここでのルート要素はmeibo要素だから、meiboを選んで、[OK]ボタンを押そうね。

さらら: はい。

ルート要素にmeiboを指定

たけち: これで「追加」ができたから、後はこの「XMLの対応付け」というダイアログの「OK」というボタンを押そう。すると「miebo_対応付け」という名前のグラフィカルなスキーマツリーが表示されたよね。

さらら: あ、本当だわ。

スキーマツリーの表示


■csvデータとXMLスキーマを対応させる

たけち: じゃあ、次の操作をしてみよう。このツリーのpersonアイコンの上をクリックして、指を離さずにそのまま押し続ける。

さらら: 押したまま?

たけち: そう押したまま。そしてそのままズリズリと左へマウスを動かしてね。

さらら: 押したまま、ズリズリ!? きゃっ、アイコンの影みたいなものが、マウスカーソルになってついてくるわ〜。いつまでどこまでズリズリすればいいの!?

たけち: ここでは、この表の一番左上であるidと書かれているセルまでズリズリと動かして・・・・・その上まで来たら、マウスボタンから指を放す。

さらら: ズリズリと動かして・・・・・指を放して…、あら1行目の文字の感じが変わって、表自体も強調されたわ。こういうふうにズリズリしていけばいいのね。

たけち: まあ「ズリズリ」というのは、あまり良い言葉じゃないからDrag and Dropという言い方が正しいんだけどね(^ ^;

さらら: あ、そうなの(^ ^;

CSVデータとperson要素の対応付け


■XMLファイルとして保存する

たけち: さて、これで対応付けが終わったから、今度は「ファイル」メニューから「名前を付けて保存」を選ぼうね。

さらら: は〜い。

たけち: ここでファイルダイアログの一番下に「ファイルの種類」という欄が出てくるので、▼の印をクリックして、「XMLデータ (*.xml)」を選ぶんだ。

さらら: あら、「XMLスプレッドシート (*.xml)」というのもあるわ。これもXMLなの?

たけち: そうだよ。XMLとして保存する際に、「XMLデータ (*.xml)」と「XMLスプレッドシート (*.xml)」の2種類があるんだけれど、ここでは「XMLデータ (*.xml)」を使うんだよ。

さらら: じゃあ、「XMLスプレッドシート」って何なの?

たけち: う〜ん・・・そうだね、「XMLスプレッドシート」については、あとで解説することにして、ここではXMLファイルだけ作っておこうね。まず、「XMLデータ (*.xml)」を選んで、ファイルの名前を【kajin2.xml】として、「保存」ボタンを押そうね。

さらら: はい。あら「ファイルをXMLデータとして保存すると、書式、画像、およびオブジェクトなどのワークシート形式が失われます…」って、出てきたわ。これでいいの?

【kajin2.xml】として「保存」

たけち: うん、これでいいんだよ。エクセルの書式などをここで保存しようとはしておらず、あくまでkajin.xmlのようなXMLを保存したいだけだからね。だから「継続」のボタンを押してね。

さらら: 「継続」のボタンを押して… これで保存できたのね。

たけち: そうだね。それから今回は説明しないけれど、次回のために「XMLスプレッドシート」での保存もしておこう。やっぱり「ファイル」メニューから「名前を付けて保存」を選んで… そして今度はファイルダイアログの一番下の「ファイルの種類」という欄で「XMLスプレッドシート (*.xml)」を選んで、ファイルの名前はkajin2_XMLSS.xmlとしておこうか、それで保存しておこうね。

さらら: そうして、保存っと…、あら、今度は「ファイルをXMLデータとして保存すると…」なんてダイアログは出てこなかったわ。

たけち: そうだね。そのことを次回まで覚えておいてね(^ ^;

さらら: えっ(^ ^;

たけち: さて、今作ったkajin2_XMLSS.xmlのことは次回に回すとして、先に保存したkajin2.xmlの方を見てみようか。Excelはいったん「ファイル」メニューから「終了」を選んで終わろうか。

さらら: あら〜、kajin2.xmlとkajin2_XMLSS.xmlで、アイコンのデザインが違うわ!? どちらもXMLファイルなのに?

アイコン

たけち: だからぁ、kajin_XMLSS.xmlのことは次回に回すとして(^ ^; まず、テキストエディタでkajin2.xmlを開いてみようね。

XMLファイルサンプル【kajin2.xml】

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<meibo>
   <person id="1">
      <name>大伴家持</name>
      <age>36</age>
      <address>yakamochi@example.com</address>
   </person>
   <person id="2">
      <name>額田王</name>
      <age>28</age>
      <address>nukata@example.com</address>
   </person>
   <person id="3">
      <name>柿本人麻呂</name>
      <age>45</age>
      <address>hitomaro@example.com</address>
   </person>
</meibo>

さらら: あ、ちゃんと綺麗に作られているわ(^ ^*

たけち: タブできちんとインデントされたXMLファイルができあがったよね。これで成功(^ ^*)

さらら: うまくできちゃった!! (^ ^*・・・

たけち: じゃあ、次回は、今回作っておきながら何も解説しなかった「「XMLスプレッドシート」形式のファイルについて勉強しようね。

さらら: あっ、はい。 (^ ^* 

→次はXMLスプレッドシート(XMLSS)形式(1)です。 (^ ^;

※注-1 Excelの表記は「ルートノード」となっていますが、これは「ルート要素」の意味の間違いである可能性があります


このコーナーは、TAKABEさま(XSLT登竜門)の全面的なご協力をいただいて作成しています。