- PR -

XMLスプレッドシートの読み込みについて

1
投稿者投稿内容
まち
常連さん
会議室デビュー日: 2003/03/02
投稿数: 26
お住まい・勤務地: 東京都
投稿日時: 2005-12-06 10:11
こんにちは。
XMLのスプレッドシートのデータの取り込みについての質問です。
現在C#.NETでWindowsアプリケーションの画面にXMLのスプレッドシートのデータを表示させたいと思っております。
データを取り込むところまではできているのですが、取り込んだ後データが1列になってしまいます。3列でデータを取り込む方法は無いでしょうか。

XMLのスプレッドシートのデータは以下のように作成します
==================
都道府県|01|東京
都道府県|02|神奈川
都道府県|03|埼玉
都道府県|04|茨城
都道府県|05|静岡
男女  |01|男
男女  |02|女
==================

このデータを取り込むと以下のようになってしまいます
==========
都道府県
01


男女
01



==========

これを作成したスプレッドシートの形のままで取り込むことはできないのでしょうか。
仕様の関係上、XMLデータではなくXMLスプレッドシートでなくてはなりません。

データ取り込みのコードは以下のようにしております。
// ファイルを開くダイアログボックス
this.openFileDialog.Filter = "Excel Template XML (*.xml)|*.xml" ;
if ( this.openFileDialog.ShowDialog() == DialogResult.OK )
{
// テキストボックスにファイル名を表示
this.textBox1.Text = this.openFileDialog.FileName ;

StreamReader reader = new StreamReader(openFileDialog.FileName);
// データテーブルへXMLファイルのデータを保存

dtSet.ReadXml(reader);
dtTable = dtSet.Tables["Data"];

for(int i = 0; i < dtTable.Rows.Count; i++)
{
// リストボックスに項目を表示(表示テスト用)
listBox1.Items.Add(dtTable.Rows[i][1]);
}
}

よろしくお願いいたします。


[ メッセージ編集済み 編集者: まち 編集日時 2005-12-06 13:31 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-12-11 07:26
XMLのスプレッドシート、ってなんですか?スキーマは、どのように作られていますか?
まち
常連さん
会議室デビュー日: 2003/03/02
投稿数: 26
お住まい・勤務地: 東京都
投稿日時: 2006-02-06 17:31
遅くなってしまい申し訳ありません。
プログラムの仕様が変わってしまったため、スプレッドシートを使用しなくなってしまいました。

>XMLのスプレッドシート、ってなんですか?スキーマは、どのように作られていますか?
XMLのスプレッドシートですが、EXCELで保存をするときにEXCELファイルをXMLの拡張子で保存したもので拡張子はXMLですがデータはEXCELのデータになります。


XMLスプレッドシートを使用しなくなったのですが、C#でこのファイルを読み込む場合はDataSet.ReadXMLではなくXmlDocumentのLoadでファイルを読み込んでループさせる方法しかわかりませんでした。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-06 18:09
引用:

まちさんの書き込み (2006-02-06 17:31) より:

XMLのスプレッドシートですが、EXCELで保存をするときにEXCELファイルをXMLの拡張子で保存したもので拡張子はXMLですがデータはEXCELのデータになります。


それは XML とは呼びませんね。
CSV か TSV でしょうね。
そりゃ、区切り位置がわからずに 1 列で表示されちゃうでしょうね。

引用:

XMLスプレッドシートを使用しなくなったのですが、C#でこのファイルを読み込む場合はDataSet.ReadXMLではなくXmlDocumentのLoadでファイルを読み込んでループさせる方法しかわかりませんでした。


先にも書いたように、XML のフォーマットしているんですか、それは。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
omatsu
常連さん
会議室デビュー日: 2002/08/29
投稿数: 20
投稿日時: 2006-02-07 12:00
引用:

じゃんぬねっとさんの書き込み (2006-02-06 18:09) より:
引用:

まちさんの書き込み (2006-02-06 17:31) より:

XMLのスプレッドシートですが、EXCELで保存をするときにEXCELファイルをXMLの拡張子で保存したもので拡張子はXMLですがデータはEXCELのデータになります。


それは XML とは呼びませんね。
CSV か TSV でしょうね。
そりゃ、区切り位置がわからずに 1 列で表示されちゃうでしょうね。



Spreadsheet XML じゃないですか。Excel2003からだったか、使えるようになりましたよね。
一応、れっきとした XML ですよ。

[ メッセージ編集済み 編集者: omatsu 編集日時 2006-02-07 12:03 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-07 12:53
おお、ホントですね。

コード:

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">


「Excel データ」というと、すぐ CSV を連想しちゃうあたりダメですね。(;_ _)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-08 19:28
同じく。。。
ってか、Wordprocessing ML を使っていながら、Spreadsheet ML に気が付かないなんてorz

引用:

まちさんの書き込み(2006-02-06 17:31)より:

XMLのスプレッドシートですが、EXCELで保存をするときにEXCELファイルをXMLの拡張子で保存したもので拡張子はXMLですがデータはEXCELのデータになります。


 ん〜?なんか、変。<?mso-application progid="Excel.Sheet"?> によって、デフォルトで使用するアプリケーションを Excel にした XML、では?


引用:

C#でこのファイルを読み込む場合はDataSet.ReadXMLではなくXmlDocumentのLoadでファイルを読み込んでループさせる方法しかわかりませんでした。


 DataSet.ReadXML では、Spreadsheet ML のスキーマを理解できないでしょうから、読み込めないと思います。
 型付けされた DataSet で、Spreadsheet ML のスキーマを指定すれば、あるいはいけるかも???

〆 written by Jitta on 2006/02/07
まち
常連さん
会議室デビュー日: 2003/03/02
投稿数: 26
お住まい・勤務地: 東京都
投稿日時: 2006-03-20 14:41
返信が遅くなってしまい申し訳ありません。
文章がわかりにくくて申し訳ありませんでした。
私自身もスプレッドシートを見たのが今回のケースが初めてでしたので、
よくわからない状態で質問をしてしまいました。
スプレッドシートを読み込む場合DataSet.ReadXml("ファイル名")でも読み込む事は可能ですが、スキーマを作成すると、

<?xml version="1.0" standalone="yes"?>
<xs:schema id="Workbook" targetNamespace="urn:schemas-microsoft-com:office:spreadsheet" xmlns:mstns="urn:schemas-microsoft-com:office:spreadsheet" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:app1="urn:schemas-microsoft-com:office:office" xmlns:app2="urn:schemas-microsoft-com:office:excel">
<xs:import namespace="urn:schemas-microsoft-com:office:excel" schemaLocation="Book1_app2.xsd" />
<xs:import namespace="urn:schemas-microsoft-com:office:office" schemaLocation="Book1_app1.xsd" />
<xs:element name="Workbook" msdata:IsDataSet="true" msdata:Locale="ja-JP">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="app1:DocumentProperties" />
<xs:element ref="app2:ExcelWorkbook" />
<xs:element name="Styles">
<xs:complexType>
<xs:sequence>
<xs:element name="Style" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Borders" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
<xs:element name="Interior" type="xs:string" minOccurs="0" msdata:Ordinal="2" />
<xs:element name="NumberFormat" type="xs:string" minOccurs="0" msdata:Ordinal="3" />
<xs:element name="Protection" type="xs:string" minOccurs="0" msdata:Ordinal="4" />
<xs:element name="Alignment" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="Vertical" msdata:Prefix="ss" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="Font" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="FontName" msdata:Prefix="ss" type="xs:string" />
<xs:attribute ref="app2:CharSet" />
<xs:attribute ref="app2:Family" />
<xs:attribute name="Size" msdata:Prefix="ss" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="ID" msdata:Prefix="ss" type="xs:string" />
<xs:attribute name="Name" msdata:Prefix="ss" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Worksheet">
<xs:complexType>
<xs:sequence>
<xs:element name="Table" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Row" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Cell" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Data" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="Data_Text" msdata:Ordinal="1">
<xs:extension base="xs:string">
<xs:attribute name="Type" msdata:Prefix="ss" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="ExpandedColumnCount" msdata:Prefix="ss" type="xs:string" />
<xs:attribute name="ExpandedRowCount" msdata:Prefix="ss" type="xs:string" />
<xs:attribute ref="app2:FullColumns" />
<xs:attribute ref="app2:FullRows" />
<xs:attribute name="DefaultColumnWidth" msdata:Prefix="ss" type="xs:string" />
<xs:attribute name="DefaultRowHeight" msdata:Prefix="ss" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element ref="app2:WorksheetOptions" />
</xs:sequence>
<xs:attribute name="Name" msdata:Prefix="ss" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

このような状態になってしまうため、1行ずつループしてカラム名を指定しないとデータを取得する事ができません。列が増えれば増えただけループが増えてしまうためとても読みにくいコードになってしまいます。

長くてごめんなさい。
1

スキルアップ/キャリアアップ(JOB@IT)