dポイントプレゼントキャンペーン実施中!

一週間前から,今までVBAで行っていたものを,理由がありVisual Studio 2008を用いて作成しなおしています.

しかし,VB .net自体,完全な初心者で,「独習VisualBasic2008」で勉強しているレベルです.

質問内容はというと,ADOでエクセルファイルのデータを読み込み,DataTableを作成し,DataGridViewで表示するということを行いたいのです.

このような感じで...

cn = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & ExcelFileName & "; Extended Properties = ""Excel 12.0; HDR=NO""")


dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$]", cn)
dAdp.Fill(dSet, "Table1")


dgv1.DataSource = dSet.Tables("Table1")

ここで,Extended PropertiesのHDRがNOになっていることに注目していただきたいのですが,あとでトランスポーズを行いたいため,このようにしています.

そして読み込むデータはこんな感じです.
文字 文字 文字 文字 文字
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
...

ほんとうはもっと大きいのですが,とりあえず,これをこのまま読み込んでしまうとデータ型が自動的に予測されてしまい(デフォルトでは8行目までスキャンされると書いてありました)データ型が自動的にInt32になってしまいます.

このため,DataTableでは一行目が文字ではなくなってしまい

0 0 0 0 0

と表示されてしまいます.

これをそのまま文字として表示させるにはどのようにすればいいのでしょうか?
一行目だけString
二行目からはDouble
のようにしたいのですが..

そしてトランスポーズ後は,
一列目がString
二列目以降はDouble

というようにしたいんです.

よろしくお願い致します.

A 回答 (3件)

進展しそうなご様子、何よりです。


VS2008 付属のヘルプか、オンラインなら MSDN ライブラリでどうぞ。

http://msdn.microsoft.com/ja-jp/library/aa139615 …

VS2008 は .NET Framework 3.5 アプリまで利用できますが、.NET Framework 2.0 がベースになります。
2.0 のクラスライブラリリファレンスは下記です。

http://msdn.microsoft.com/ja-jp/library/ms229335 …

それでは頑張ってください。
    • good
    • 0
この回答へのお礼

edp3142様

ありがとうございました.

お礼日時:2010/10/06 13:09

とりあえず、すべて文字列として読み込んで(Extended Properties に IMEX=1 を指定) DataTable を作成してから、


データ型を定義した DataTable を別途用意して、変換をかけながらデータ移送してはどうでしょうか。

データ型を定義した DataTable は、型付き DataSet としてデザイナで定義するか、以下のようにコーディングします。

Dim dtNew As New DataTable
dt.Columns.Add("Column1", GetType(String))
dt.Columns.Add("Column2", GetType(Double))

尚、読み込みデータの1行目は見出し行ですので、DataTable の中のデータとして持たせるのではなく、上記の Column1, Column2 のように列名として持たせるべきだと思います。つまり、上記は

Dim dt As DataTable = dSet.Tables("Table1")

Dim dtNew As New DataTable
dt.Columns.Add(dt.Rows(0).Item(0), GetType(String))
dt.Columns.Add(dt.Rows(0).Item(1), GetType(Double))

といった感じに書きなおせるかと思います。
    • good
    • 0
この回答へのお礼

edp3142様

ご回答ありがとうございます.
上記アドバイスを元にして,現在うまくいきそうです.重ねて御礼申し上げます.

レベルの低い質問を1つさせてください.

Java APIのように,クラスやメソッドのライブラリーのようなものは,VBにはないのでしょうか?

いまの現状は,やりたいことをgoogleで検索して,さぐりさぐりやっているような状況です.
初心者はこのページを見たらいい!みたいなサイトはありますか?

ちなみに,ぼくはVBAを半年間くらい真剣に勉強して,Excelマクロで出来る範囲のことはすべてできるレベルです(たぶん..).

よろしくお願いします.

お礼日時:2010/10/05 21:09

根本的に間違ってます。


ADOはデータベースを読み書きするためのもの。
データベースはフィールド毎にデータ型がほぼ決まっている。
エクセルは、全く違います。
ADOではなく、Excel.Application オブジェクトを使いましょう。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます.

読み込むファイル形式はエクセルだけでなく,テキスト形式,CSVと,いろいろあるので,単純にそういうわけにはいかず,少し難しいように感じます.

少し具体的に言いますと,VBのフォームアプリケーションで主成分分析等の多変量解析を行い,その結果をグラフィック表示するようなものを作りたいんです.

なにかアドバイスがありましたら,教えていただけないでしょうか?

お礼日時:2010/10/05 09:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!