Excel 2010を使ってCSVからXMLを作る方法

9.10
2013

csvtoxml

Excel 2010を使ってCSVからXMLを作る方法です。

仕事でXMLデータの作成が必要になりました。
まあ手打ちで作ってもいいんですが、データ量が多ければそういうわけにもいかず。

しかも、元のデータはCSVデータです。
無料の変換ツールをググりましたがどれもこれも古いツールばかり。
(もう時代遅れなんすかね、XMLとか。)
なのでExcelで作業することでツール不要で実現。

あくまでも簡単にやりたい俺のための作業メモみたいなもんなので、本格的な方法を求めている人は他所へどうぞ。

CSVデータを作る

csv

↑こういうCSVを作ります。

まあ、ブログ記事の更新情報をXMLデータにしたい、とでも思ってください。

XML Schemaデータを作る

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="contents">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="entry" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="entry">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="id"/>
                <xsd:element ref="blog_name"/>
                <xsd:element ref="blog_url"/>
                <xsd:element ref="date"/>
                <xsd:element ref="entry_title"/>
                <xsd:element ref="entry_url"/>
                <xsd:element ref="category"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="id" type="xsd:integer"/>
    <xsd:element name="blog_name" type="xsd:string"/>
    <xsd:element name="blog_url" type="xsd:anyURI"/>
    <xsd:element name="date" type="xsd:dateTime"/>
    <xsd:element name="entry_title" type="xsd:string"/>
    <xsd:element name="entry_url" type="xsd:anyURI"/>
    <xsd:element name="category" type="xsd:string"/>
</xsd:schema>

↑面倒なんで、このソースをそのままコピペすればいいと思います。
メモ帳かなんかでこれを作って、ファイル名を「***.xsd」で保存してください。文字コードはUTF-8です。
上から順番に、XMLのタグの入れ子を外側から定義していくイメージですね。
最も子要素である、実際にデータが入ってくるタグについては、そのデータの型を「type=」で指定します。

  • 文字列:string
  • 数値:integer
  • URL:anyURI
  • 日付:dateTime

こんな感じ。

豊富に用意されたデータ型を利用する|@IT

↑データ型については、こちらのサイトに非常に詳しく説明があります。

Excelで「XMLデータの対応付け」を行う

1.CSVとXSDファイルが完成したら、まずはCSVファイルをExcelで開きます。
2.そして、Excelのメニューから、[開発]メニューの[XML]タブの[ソース]を選択。
3.すると、右側に「XML ソース」という作業ウインドウが開きます。
4.作業ウインドウの一番下に「XMLの対応付け」というボタンがあるのでクリック
5.開いたウインドウの「追加」をクリックし、作成したXSDファイルを選択
6.すると、「複数のルートノードが含まれている・・・」というようなメッセージが出ますが、作成したXMLスキーマの中で定義してある、最も外側のタグの名前を選択してください。(※上記のサンプルの例なら「contents」です。)
7.OKを押すと、3の作業ウインドウの中にタグの名前がツリー上に表示されます。
8.CSVのデータを紐づけたいのは最下層の子要素だと思いますが、その親要素を作業ウインドウ内で選択。そのままCSVのデータの起点(左上)までドラッグ&ドロップ。
※上のサンプルなら、「entry」をドラッグ&ドロップします。
9.CSVのデータが表のように装飾されたら完成。
10.ファイルに名前を付けて保存 → ファイル形式を「XMLデータ」で保存。

画面キャプチャとかを取るのが面倒なので、テキストで。

たのしいXML: XMLをOfficeで扱う

なお、こちらのサイトでキャプチャ付きで詳しく解説されています。(Excel2003ですが、そんなに変わらないです。)

なお、手順2の[開発]メニューが見つからない方。
Excel2010ってホント糞ですよね。

Excelの画面上部、「ファイル|ホーム|挿入・・・・」とかってあるところの下のスペース、ここを「リボン」と呼ぶらしいんですが。
そのリボンの上で、どこでもいいので、右クリックしてください。
そこから、「リボンのユーザー設定」を選びます。
で、開いた画面の右側、「リボンのユーザー設定>メインタブ」の中で、「開発」にチェックが入っていないと、メニューが表示されないです。

そもそもリボンすら表示されてない人は、画面右上の×印の近くのはてなマークの隣に、「V」←こんなマークありません?
それ押せばリボンが表示されます。

完成したXMLデータ

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contents>
	<entry>
		<id>1</id>
		<blog_name>Sunday In The Park</blog_name>
		<blog_url>http://snowadays.jp/</blog_url>
		<date>2013-09-07T12:54:00.000</date>
		<entry_title>ウェブサイトに設置するソーシャルボタンの設定やサイズについてまとめ(Facebookいいね!ボタン)</entry_title>
		<entry_url>http://snowadays.jp/2013/09/1922</entry_url>
		<category>Facebook</category>
	</entry>
	<entry>
		<id>2</id>
		<blog_name>Sunday In The Park</blog_name>
		<blog_url>http://snowadays.jp/</blog_url>
		<date>2013-09-07T12:49:00.000</date>
		<entry_title>ウェブサイトに設置するソーシャルボタンの設定やサイズについてまとめ(Twitterツイートボタン)</entry_title>
		<entry_url>http://snowadays.jp/2013/09/1940</entry_url>
		<category>Facebook</category>
	</entry>
	<entry>
		<id>3</id>
		<blog_name>Sunday In The Park</blog_name>
		<blog_url>http://snowadays.jp/</blog_url>
		<date>2013-08-28T14:45:00.000</date>
		<entry_title>Facebook規約変更、Facebookページ上でのプロモーションがアプリ無しでも可能に</entry_title>
		<entry_url>http://snowadays.jp/2013/08/1903</entry_url>
		<category>Facebook</category>
	</entry>
	<entry>
		<id>4</id>
		<blog_name>Sunday In The Park</blog_name>
		<blog_url>http://snowadays.jp/</blog_url>
		<date>2013-08-22T20:00:00.000</date>
		<entry_title>ブログやWebページにFacebookの投稿埋め込む場合の注意点まとめ。JavaScript SDKの設置など。</entry_title>
		<entry_url>http://snowadays.jp/2013/08/1870</entry_url>
		<category>Facebook</category>
	</entry>
	<entry>
		<id>5</id>
		<blog_name>Sunday In The Park</blog_name>
		<blog_url>http://snowadays.jp/</blog_url>
		<date>2013-08-21T20:55:00.000</date>
		<entry_title>今年は富士山に登るのはやめた。ストリートビューでも見る。</entry_title>
		<entry_url>http://snowadays.jp/2013/08/1797</entry_url>
		<category>旅行</category>
	</entry>
</contents>

結構仕事中にこの手のハックをググって習得することが多いのですが、探すのに結構苦労することも多いです。
そのまま使わないと忘れてしまったりすることもあるので、こうして共有することで自分も助かるかも、ということでこんな話もこれからは少し書いていこうかと。