- - PR -
XMLスプレッドシートの読み込みについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 ] | ||||||||
|
投稿日時: 2005-12-11 07:26
XMLのスプレッドシート、ってなんですか?スキーマは、どのように作られていますか?
| ||||||||
|
投稿日時: 2006-02-06 17:31
遅くなってしまい申し訳ありません。
プログラムの仕様が変わってしまったため、スプレッドシートを使用しなくなってしまいました。 >XMLのスプレッドシート、ってなんですか?スキーマは、どのように作られていますか? XMLのスプレッドシートですが、EXCELで保存をするときにEXCELファイルをXMLの拡張子で保存したもので拡張子はXMLですがデータはEXCELのデータになります。 XMLスプレッドシートを使用しなくなったのですが、C#でこのファイルを読み込む場合はDataSet.ReadXMLではなくXmlDocumentのLoadでファイルを読み込んでループさせる方法しかわかりませんでした。 | ||||||||
|
投稿日時: 2006-02-06 18:09
それは XML とは呼びませんね。 CSV か TSV でしょうね。 そりゃ、区切り位置がわからずに 1 列で表示されちゃうでしょうね。
先にも書いたように、XML のフォーマットしているんですか、それは。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-02-07 12:00
Spreadsheet XML じゃないですか。Excel2003からだったか、使えるようになりましたよね。 一応、れっきとした XML ですよ。 [ メッセージ編集済み 編集者: omatsu 編集日時 2006-02-07 12:03 ] | ||||||||
|
投稿日時: 2006-02-07 12:53
おお、ホントですね。
「Excel データ」というと、すぐ CSV を連想しちゃうあたりダメですね。(;_ _) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-02-08 19:28
同じく。。。
ってか、Wordprocessing ML を使っていながら、Spreadsheet ML に気が付かないなんてorz
ん〜?なんか、変。<?mso-application progid="Excel.Sheet"?> によって、デフォルトで使用するアプリケーションを Excel にした XML、では?
DataSet.ReadXML では、Spreadsheet ML のスキーマを理解できないでしょうから、読み込めないと思います。 型付けされた DataSet で、Spreadsheet ML のスキーマを指定すれば、あるいはいけるかも??? 〆 written by Jitta on 2006/02/07 | ||||||||
|
投稿日時: 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