Excel 2003 で XML の対応付けを作成する
Frank Rice
Microsoft Corporation
February 2005
適用対象:
Microsoft Office Excel 2003
要約: Microsoft Office Excel 2003 で行う一般的な XML 作業を通して、Office 2003 Edition の新しい XML 機能について詳しく説明します。カスタム スキーマを追加する方法、Excel で XML の対応付けを使用して作業する方法、およびさまざまなスキーマに基づいて一連の対応付けを作成する方法について学習します。
目次
はじめに
XML の対応付けをブックに追加する
[XML ソース] 作業ウィンドウを使用して対応付ける
対応付けられた範囲にデータをインポートする
XML の対応付けのシナリオ
表形式のテーブルを作成する
入れ子になった要素を使用する
経費明細書形式のテーブルを作成する
リレーショナル テーブルを作成する
まとめ
その他のリソース
はじめに
Microsoft Office Excel 2003 では、独自の XML スキーマ定義 (XSD) をブックに追加できるようにすることで、ネイティブ XML の使用に対するサポートが強化されています。これにより、データをインポートまたはエクスポートする際に、データに意味付けを行うために使用できる XML の対応付けが作成されます。したがって、独自の XML ボキャブラリやスキーマに準拠するデータをインポートしてから、同じ XML スキーマを使用してデータを書き戻すことができます。
この機能は Office ソリューション開発者を対象としていますが、熟練したユーザーも十分に利用できます。この機能により、次の操作が可能です。
- Excel スプレッドシートと XML 構造間の対応付けを作成します。
- その後、作成した対応付けを使用して、XML データを同じ構造にインポートします。
- 作成した対応付けを使用して、スプレッドシートから XML スキーマに準拠する XML データをエクスポートします。
- それ以降のインポート操作やエクスポート操作に、作成した対応付けを保存して再利用します。
XSD ファイルを Excel ブックに追加することから処理を始めます。XSD ファイルを追加すると、Excel により [XML ソース] 作業ウィンドウ (図 1 参照) で XML の対応付けが作成されます。このウィンドウは、XML を特定の範囲または 1 つのセルに対応付けるために使用します。また、Excel では、この対応付けを使用して、対応付けられた範囲と XML スキーマの要素間の関係が管理されます。1 つのブックには、それぞれの対応付けが独立したエンティティとなる、多数の XML の対応付けを含めることができます。同様に、同じスキーマを参照する複数の対応付けを含めることもできます。Excel では、XML データをインポートまたはエクスポートするときに、対応付けを使用して、対応付けられた範囲のコンテンツがスキーマの要素と関連付けられます。
注: 対応付けには、1 つのルート要素が含まれている必要があります。複数のルート要素を定義するスキーマを追加する場合は、対応付けで使用する 1 つのルート要素を選択する必要があります。
[XML ソース] 作業ウィンドウは、Office ソリューション開発者が、ユーザー指定のスキーマで XML データを使用および生成する方法を認識するスプレッドシートを迅速に設定できるビジュアル ツールです。
図 1. [XML ソース] 作業ウィンドウ
[XML ソース] 作業ウィンドウは、ツリー ビューで構成されます。ツリー ビューを使用すると、必要な XML 要素を選択し、それらの要素を論理的にグループ化されているセルのグリッドや個別のテーブルにドラッグできます。
では、[XML ソース] 作業ウィンドウから Excel の XML データ、スキーマ、および対応付けを扱う方法について、詳しく見ていきましょう。以下の手順を使用して、作業の後に続くシナリオの形式を調査できます。
XML の対応付けをブックに追加する
XML データを扱う最初の手順は、スキーマまたは対応付けをブックに追加することです。
[表示] メニューの [作業ウィンドウ] をクリックして、[XML ソース] 作業ウィンドウを表示します。
または、
[データ] メニューの [XML] をポイントし、[XML ソース] をクリックします。
[XML の対応付け] をクリックし、[追加] をクリックします。
スキーマ ファイルに移動して、[開く] をクリックし、[OK] をクリックします。
これにより、スキーマが関連付けられ、XML の対応付けがブックに追加されます。これで、スキーマ要素をワークシートにドラッグして、対応付けることができるようになりました。ブックにはデータが追加されていないことに注意してください。目的の要素を対応付けてワークシートをマークアップした後、別の手順でデータをインポートする必要があります (以下のセクションを参照してください)。
注: ブックには複数のスキーマを追加できます。ただし、スプレッドシートの 1 つの範囲には 1 つの XML 要素しか取り込めません。2 つ以上の XML 要素を重複させることはできません。
図 1 は、[Root] というルート ノードを含む XML の対応付けが表示された [XML ソース] 作業ウィンドウを示しています。Excel では、子要素が階層ビューに表示されます。
- [オプション] をクリックして、対応付けのカスタマイズや対応付ける枠線の切り替えを行います。ここでは、作業ウィンドウでのサンプル データのプレビュー、作業ウィンドウのヘルプ テキストの表示/非表示の切り替え、および対応付ける際に要素を自動的に結合することを選択できます。また、繰り返し要素をワークシートに対応付けるときに列見出しとして使用するデータを指定することもできます。
- [XML の対応付け] をクリックして、[XML の対応付け] ダイアログ ボックスを表示します。このダイアログ ボックスを使用して XML の対応付けの追加、削除、または名前変更を行うことができます。
- [エクスポートする対応付けの確認] をクリックし、現在選択されている対応付けを使用して Excel からデータをエクスポートできるかどうかを確認します。
[XML ソース] 作業ウィンドウを使用して対応付ける
[XML ソース] 作業ウィンドウでは、ツリー ビュー形式でブックの XML スキーマが表示されます。XML スキーマをワークシートにドラッグするか、各要素を右クリックして [要素の対応付け] をクリックすることで、要素を対応付けることができます。1 つの要素をクリックし、Ctrl キーを押したまま別の要素をクリックすることで、連続していない複数の要素を選択できます。要素を選択した後は、ワークシート上でそれらの要素を表示する場所にドラッグします。要素が繰り返し要素の場合は、Excel によって、要素を追加したセル内に XML リストが作成されます。
対応付けられた範囲にデータをインポートする
ここでは、対応付けられたグリッドに XML データをインポートしましょう。
注: 既定では、インポートまたはエクスポート中に XSD ファイルを使用していると、入力規則が有効になりません。入力規則を有効にしたり、XML マッパーに関連する他のオプションを選択するには、[データ] メニューの [XML] をポイントし、[XML の対応付けのプロパティ] をクリックします。
- XML データをインポートする、対応付けられた範囲内のセルを選択します。
- [データ] メニューの [XML] をポイントし、[インポート] をクリックします。
- [ファイルの場所] ボックスで、インポートする XML データ ファイルを含むドライブ、フォルダ、またはインターネット上の場所をクリックします。
- フォルダの一覧で、ファイルを含むフォルダを探して開きます。
- ファイルをクリックし、[インポート] をクリックします。
XML の対応付けのシナリオ
ここまでで、スキーマから対応付けを作成し、その対応付けを使用してワークシートにデータをインポートする方法を理解できたことでしょう。以下のセクションでは、さまざまなスキーマ構造をグリッドに対応付ける方法について説明します。データをインポートした後は、スキーマの構造により、そのデータの対応付けと外観が決まります。以下のセクションでは、XML データおよび XSD スキーマ リストのインポート結果を示す考え方を紹介します。シナリオごとに、以下の操作を実行することをお勧めします。
- メモ帳などのテキスト エディタを使用して、XML リストと XSD リストを個別のファイルにコピーして貼り付けます。
- XSD データを [XML ソース] 作業ウィンドウにインポートして、対応付けを作成します。
- 対応付けの指定された要素をワークシートのセルにドラッグ アンド ドロップします。
- XML ファイルからデータをインポートします。
これらのスキーマを独自のスキーマと比較することにより、データ上の特定のスキーマの効果を理解したり、ニーズを満たすようにデータの形を微調整する必要がある箇所で調整を行うことができます。
表形式のテーブルを作成する
ユーザー インターフェイス
([XML ソース] 作業ウィンドウを使用して) Row 要素または Root 要素をセル B2 にドロップすると、次のテーブルになります。
図 2. 表形式の対応付け
XML インスタンス
<?xml version="1.0"?>
<Root
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>
<Row>
<Column1>A</Column1>
<Column2>B</Column2>
<Column3>C</Column3>
</Row>
<Row>
<Column1>X</Column1>
<Column2>Y</Column2>
<Column3>Z</Column3>
</Row>
</Root>
XSD
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Root">
<complexType>
<sequence>
<element name="Row" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="Column1" type="string" />
<element name="Column2" type="string" />
<element name="Column3" type="string" />
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
入れ子になった要素を使用する
ユーザー インターフェイス
Person 要素または Root 要素をセル B3 にドロップすると、次のテーブルになります。
図 3. 入れ子になった要素の対応付け
XML インスタンス
<?xml version="1.0"?>
<Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Person>
<FirstName>Janet</FirstName>
<Middle>Q</Middle>
<LastName>Leverling</LastName>
<Address>
<Address1>123 Elm</Address1>
<Address2></Address2>
<City>Pleasantville</City>
<State>MA</State>
<Zip>12345</Zip>
</Address>
</Person>
<Person>
<FirstName>Robert</FirstName>
<Middle>Q</Middle>
<LastName>Fuller</LastName>
<Address>
<Address1>123 Main</Address1>
<Address2></Address2>
<City>Mayberry</City>
<State>MA</State>
<Zip>12345</Zip>
</Address>
</Person>
</Root>
XSD
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Root">
<complexType>
<sequence>
<element name="Person" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="FirstName" type="string"/>
<element name="Middle" type="string"/>
<element name="LastName" type="string"/>
<element name="Address">
<complexType>
<sequence>
<element name="Address1" type="string"/>
<element name="Address2" type="string"/>
<element name="City" type="string"/>
<element name="State" type="string"/>
<element name="Zip">
<simpleType>
<restriction base="positiveInteger">
<pattern value="[0-9]{5}(-[0-9]{4})?"/>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
経費明細書形式のテーブルを作成する
ユーザー インターフェイス
Meta 要素をセル B2 にドロップし、ExpenseItem 要素をセル B6 にドロップすると、次のテーブルになります。
図 4. 経費明細書の対応付け
Root 要素をセル B2 にドロップすると、次のように変化します。
図 5. 経費明細書の対応付けの変化
XML インスタンス
<?xml version="1.0"?>
<Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Meta>
<Name>Nancy Davolio</Name>
<Date>2005-01-01</Date>
<SAPCode>0001</SAPCode>
</Meta>
<ExpenseItem>
<Date>2005-01-01</Date>
<Description>Airfare</Description>
<Amount>500</Amount>
</ExpenseItem>
<ExpenseItem>
<Date>2005-01-01</Date>
<Description>Hotel</Description>
<Amount>200</Amount>
</ExpenseItem>
</Root>
XSD
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Root">
<complexType>
<sequence>
<element name="Meta">
<complexType>
<sequence>
<element name="Name" type="string"/>
<element name="Date" type="date"/>
<element name="SAPCode">
<simpleType>
<restriction base="positiveInteger">
<pattern value="[0-9]{4}" />
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
</element>
<element name="ExpenseItem" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="Date" type="date"/>
<element name="Description" type="string"/>
<element name="Amount">
<simpleType>
<restriction base="decimal">
<pattern value="[0-9]+(.[0-9]{2})?"/>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
リレーショナル テーブルを作成する
ユーザー インターフェイス
Customer 要素または Root 要素をセル A3 にドロップすると、グリッドは次のように表示されます。
図 6. リレーショナル テーブルの対応付け
または、以下の操作を行って 3 つの個別のテーブルを作成できます。
- Customer 要素をセル A3 にドロップします (Customer/Id、Customer/Name、Customer/Address のみ選択)。
- Order 要素をセル A7 にドロップします (Customer/Order/Id と Customer/Order/Date のみ選択)。
- Product 要素をセル A13 にドロップします (Customer/Order/Product/Name と Customer/Order/Product/Quantity のみ選択)。
図 7. リレーショナル テーブルの対応付けの複数テーブル ビュー
XML インスタンス
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Customer>
<Id>1</Id>
<Name>Janet Q. Leverling</Name>
<Address>
<AddressLine>123 Elm</AddressLine>
<City>Pleasantville</City>
<State>WA</State>
<zip>12345</zip>
</Address>
<Order>
<Id>1</Id>
<Date>3/2/01</Date>
<Product>
<Name>Widget</Name>
<Quantity>3</Quantity>
</Product>
<Product>
<Name>Sprocket</Name>
<Quantity>7</Quantity>
</Product>
</Order>
<Order>
<Id>2</Id>
<Date>4/7/01</Date>
<Product>
<Name>Widget</Name>
<Quantity>1</Quantity>
</Product>
</Order>
</Customer>
<Customer>
<Id>2</Id>
<Name>Nancy Davolio</Name>
<Address>
<AddressLine>123 Main</AddressLine>
<City>Mayberry</City>
<State>WA</State>
<zip>12345</zip>
</Address>
<Order>
<Id>3</Id>
<Date>5/1/01</Date>
<Product>
<Name>Widget</Name>
<Quantity>5</Quantity>
</Product>
<Product>
<Name>Sprocket</Name>
<Quantity>2</Quantity>
</Product>
</Order>
<Order>
<Id>4</Id>
<Date>5/8/01</Date>
<Product>
<Name>Widget</Name>
<Quantity>4</Quantity>
</Product>
</Order>
</Customer>
</Root>
XSD
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="Customer">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="Id" />
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="Name" />
<xsd:element minOccurs="0" maxOccurs="1" name="Address">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="AddressLine" />
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="City" />
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="State" />
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="zip" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="Order">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="Id" />
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="Date" />
<xsd:element minOccurs="0" maxOccurs="unbounded" name="Product">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="Name" />
<xsd:element minOccurs="0" maxOccurs="1" type="xsd:string" name="Quantity" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
複数次元のテーブルを作成する
ユーザー インターフェイス
FlightReport 要素または Root 要素をセル A3 にドロップすると、グリッドは次のように表示されます。
図 8. 複数次元の対応付け
XML インスタンス
<?xml version="1.0"?>
<Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FlightReport altitude="1000" weight="10000">
<Measurement>
<Airspeed>350</Airspeed>
<Vibration>125.6</Vibration>
<Noise>62</Noise>
<Drag>0.12</Drag>
</Measurement>
<Measurement>
<Airspeed>400</Airspeed>
<Vibration>99</Vibration>
<Noise>75</Noise>
<Drag>0.10</Drag>
</Measurement>
</FlightReport>
<FlightReport altitude="2000" weight="10000">
<Measurement>
<Airspeed>350</Airspeed>
<Vibration>125.6</Vibration>
<Noise>62</Noise>
<Drag>0.12</Drag>
</Measurement>
<Measurement>
<Airspeed>400</Airspeed>
<Vibration>99</Vibration>
<Noise>75</Noise>
<Drag>0.10</Drag>
</Measurement>
</FlightReport>
<FlightReport altitude="1000" weight="15000">
<Measurement>
<Airspeed>350</Airspeed>
<Vibration>125.6</Vibration>
<Noise>62</Noise>
<Drag>0.12</Drag>
</Measurement>
<Measurement>
<Airspeed>400</Airspeed>
<Vibration>99</Vibration>
<Noise>75</Noise>
<Drag>0.10</Drag>
</Measurement>
</FlightReport>
<FlightReport altitude="2000" weight="15000">
<Measurement>
<Airspeed>350</Airspeed>
<Vibration>125.6</Vibration>
<Noise>62</Noise>
<Drag>0.12</Drag>
</Measurement>
<Measurement>
<Airspeed>400</Airspeed>
<Vibration>99</Vibration>
<Noise>75</Noise>
<Drag>0.10</Drag>
</Measurement>
</FlightReport>
</Root>
XSD
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Root">
<complexType>
<sequence>
<element name="FlightReport" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="Measurement" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="Airspeed" type="positiveInteger"/>
<element name="Vibration" type="decimal"/>
<element name="Noise" type="positiveInteger"/>
<element name="Drag">
<simpleType>
<restriction base="decimal">
<pattern value="[0-9]{1,2}.[0-9]{2}"/>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
</element>
</sequence>
<attribute name="altitude" type="positiveInteger"/>
<attribute name="weight" type="positiveInteger"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
属性中心の対応付けを作成する
ユーザー インターフェイス
FlightReport 要素または Root 要素をセル A3 にドロップすると、グリッドは次のように表示されます。
図 9. 属性中心の対応付け
XML インスタンス
<?xml version="1.0"?>
<Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Employees EmployeeId="1" FirstName="Janet" LastName="Leverling" Title="Sales Representative"/>
<Employees EmployeeId="2" FirstName="Nancy" LastName="Davolio" Title="Technical Advisor"/>
<Employees EmployeeId="3" FirstName="Robert" LastName="Fuller" Title="Accountant"/>
</Root>
XSD
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="Root">
<complexType>
<sequence>
<element name="Employees" maxOccurs="unbounded">
<complexType>
<attribute name="EmployeeId" type="positiveInteger"/>
<attribute name="FirstName" type="string"/>
<attribute name="LastName" type="string"/>
<attribute name="Title">
<simpleType>
<restriction base="string">
<enumeration value="Sales Representative"/>
<enumeration value="Technical Advisor"/>
<enumeration value="Accountant"/>
</restriction>
</simpleType>
</attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
作成できる書式設定は、書式設定を作成するためのスキーマと同じ数だけ存在することは明らかです。この作成できる書式設定セットは、独自のスキーマの開発や微調整を行う出発点とするために用意されています。
まとめ
スキーマにより、XML データ ファイルで許可される要素、属性、データ型、および階層を指定できます。スキーマ ファイルを使用すると、XML データを検証したり、データを交換するときに予測できることを保証できます。このように予測できることにより、データが正しく表示されるようにスキーマを調整できます。Excel では、[XML ソース] 作業ウィンドウを使用して要素をセルに対応付けます。さらに、ニーズに最適な形式で、比較的容易に XML データをインポートできます。
その他のリソース
Excel 2003 での XML と XML の対応付けを使用したデータ統合の詳細については、以下のリソースを参照してください。
- Importing XML Maps, XML Lists, and Dynamic Chart Sources in Excel 2003 (英語)
- Using the Excel 2003 Object Model to Add XML Data Integration (英語)