Excel 2010 を使って XML ファイルを編集する

仕事でアプリケーションを作った際に、XML からデータを読み込めるようにしました。
しかし、XML の編集はできる人が限られてしまうので、エクセルで XML ファイルのデータを編集できるようにしてみました。

# 用意するアプリ
1. Excel 2010。
1. XML スキーマファイル(*.xsd)を作れるアプリケーション。

# 前準備
Excel 2010 の「開発」タブを使えるようにしておきます。 
「開発」タブを表示する方法は以下を参照のこと。

**[開発] タブを表示する - Outlook - Microsoft Office**
**http://office.microsoft.com/ja-jp/outlook-help/HA101819080.aspx**

# 任意のワークブック(*.xlsx)で XML データを編集できるようにする。
まずは任意のワークブックで XML のデータを編集できるようにします。

## ひな形となる XML ファイルを作る。
まずは、ひな形となる XML ファイルを用意します。
今回はこのようなひな形を用意しました。

```xml:test.xml
<?xml version = "1.0" encoding = "utf-8"?>
<root>
  <title>title</title>
  <items>
    <item>
      <id>id1</id>
      <name>name1</name>
      <command>command1</command>
    </item>
    <item>
      <id>id2</id>
      <name>name2</name>
      <command>command2</command>
    </item>
  </items>
</root>
```

##ひな形から、XML スキーマファイル(*.xsd)を作る。
次に、XML スキーマファイルを作成します。
スキーマファイルとは、XML の構造が記述されているファイルです。

Visual Studio の Professional 以上には、XML から XML スキーマファイルを作成するための機能がありますので、今回はそれを使います。

まず、Visual Studio でひな形となる XML ファイルを読み込みます。

次に、メニューの「XML > スキーマの作成」を選択します。
![select_xml_schema.png](https://qiita-image-store.s3.amazonaws.com/0/43814/b8a8b0e7-f1d1-791b-bbb2-f3a1b8348d99.png)

すると、以下の様な xsd ファイルが自動的に作成されます。

```xml:test.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="title" />
        <xs:element name="items">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="item">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="id" />
                    <xs:element name="name" />
                    <xs:element name="command" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
```

この時点ではまだファイルとして保存されていないので、「名前をつけて保存」で保存します。

##エクセルのワークシートのセルに XML の要素を対応付ける。
先ほど作った XML スキーマファイルを使って、エクセルのワークシートに XML の要素を対応付けします。

まず、エクセルで任意のファイルを開きます。

次に、「開発」タブの「XML > ソース」をクリックします。
![select_xml_source.png](https://qiita-image-store.s3.amazonaws.com/0/43814/47fc6efb-9eee-e199-7539-908cba16afad.png)

すると、右側に「XML ソース」ウィンドウが表示されます。
![show_xml_source.png](https://qiita-image-store.s3.amazonaws.com/0/43814/c478c11f-3596-3539-4b30-2a244c8f3c2e.png)
<br>
このウィンドウの「XML の対応付け」ボタンを押します。
すると、以下の様なダイアログが表示されます。
![show_xml_association.png](https://qiita-image-store.s3.amazonaws.com/0/43814/0f30d301-4439-9ee5-0031-8e92135c2b3c.png)
<br>
このダイアログの「追加」ボタンを押して、先ほど作った XML スキーマファイルを読み込みます。
読み込んでこのダイアログに戻ってきたら「OK」ボタンを押します。

ダイアログを閉じると、先ほどの「XML ソース」ウィンドウに XML スキーマファイルに記述されていた要素が表示されます。
![xml_source_association.png](https://qiita-image-store.s3.amazonaws.com/0/43814/46d3f64c-5573-fdbb-9681-c259810bf71f.png)

ここに表示されている要素を選択して、セルにドラッグするとそのセルと要素が対応付けられます。
関連付けた例を以下に表示します。

![xml_cell_association.png](https://qiita-image-store.s3.amazonaws.com/0/43814/d035f5e0-eae9-35ba-ff7f-cfee78df72ac.png)

この例では、以下の様な対応付けがされています。

* **「root/title」**と**「A1」**
* **「root/items/item/id」**と**「A3～A4」**
* **「root/items/item/name」**と**「B3～B4」**
* **「root/items/item/command」**と**「C3～C4」**

**「root/items/item」**の数は、**「C4」**の右下の**【」】**を下にドラッグすることで増やすことができます。

これでこのワークブックを使って XML データの編集が出来る状態となりました。

# XML ファイルからデータを読み込む
では、先ほどの XML ファイルのひな形からワークブックにデータを読み込んでみましょう。

「開発」タブの「XML > インポート」をクリックします。
![select_xml_import.png](https://qiita-image-store.s3.amazonaws.com/0/43814/fb451fb6-5090-306d-a15d-37e9139854c8.png)

そこから先ほどのひな形を選択してインポートします。
すると、対応付けに応じて XML のデータがセルに読み込まれます。
![imported_xml.png](https://qiita-image-store.s3.amazonaws.com/0/43814/84c07e4b-54e7-db30-6783-735864970ec4.png)

**「root/items/items」**の数に応じて、対応付けの範囲も自動的に調整されています。

# 読み込んだデータをエクセル上で編集する
編集は、対応付けされたセルの中身を書き換えるだけです。

例として、以下のように編集してみます。
![xml_changed.png](https://qiita-image-store.s3.amazonaws.com/0/43814/039e67f9-f979-59aa-545c-12a9253fa222.png)

値はもちろん、**「root/items/item」**の数も変更してみました。

# 編集したデータを XML ファイルとして出力する
では、この編集結果を XML ファイルとして出力してみましょう。

「開発」タブの「XML > エクスポート」をクリックします。
![select_xml_export.png](https://qiita-image-store.s3.amazonaws.com/0/43814/8f06ca44-b73a-9a57-4faa-ad29572c7586.png)

そこから出力先を指定して、エクスポートします。
先ほど編集したものをエクスポートした結果は以下のとおりです。

```xml:test2.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
  <title>title2</title>
  <items>
    <item>
      <id>id3</id>
      <name>name3</name>
      <command>command3</command>
    </item>
    <item>
      <id>id4</id>
      <name>name4</name>
      <command>command4</command>
    </item>
    <item>
      <id>id5</id>
      <name>name5</name>
      <command>command5</command>
    </item>
  </items>
</root>
```

これで無事に XML のデータを編集することが出来ました。

# 参考サイト

**XML データをエクスポートする - Excel - Microsoft Office**
http://office.microsoft.com/ja-jp/excel-help/HP010206401.aspx

**Excel(CSV)からXMLへの変換(エクスポート)方法**
http://www.saka-en.com/office/excel-export-to-xml/