- - PR -
Excelからデータを取得する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-17 11:48
いつもお世話になっております。
今回、エクセルファイルからデータを取得したいと思っております。 エクセルの列に数字と文字が両方入力されている場合に、 値を正常に取得できません。(数値しか取得できません。) どなたか解決方法をしっていらっしゃるかたは、ご教授お願いできますでしょうか。 【追伸】ネット上を参照しましたが、『IMEX=1』とすればできるとありましたが、 実際にはできませんでした。 【環境】 VB.net Windows2000 【Vb.Netのソース】 '-------------------------------------------- 'Excelより情報取得(CodeSettingName.xls) '-------------------------------------------- Dim oConn As New OleDbConnection Dim oCommand As New OleDbCommand Dim oDataAdapter As New OleDbDataAdapter Dim oDataSet As New DataSet Dim dtExlInfoList As New DataTable Dim strXml As String Dim intDtCount As Integer Dim strFlName As String Dim strFolderPath As String 'ボタン判定名 Dim strName As String = "CodeSetting" Try 'Excel接続文字列の設定 oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " + _ "Data Source=" & Me.txtPath1.Text & ";" + _ "Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""" 'コネクションの設定 oCommand.Connection = oConn 'SQL文の設定 oCommand.CommandText = "Select * from [" & CF_SEET_NAME & "$]" 'Excel(Sheet名)の指定 'SELECTコマンドの設定 oDataAdapter.SelectCommand = oCommand 'データを取得する oDataAdapter.Fill(dtExlInfoList) |
|
投稿日時: 2005-05-17 16:45
わくさんのソースをそのまま貼り付けたら
私の環境では動きますね。 エクセルファイルは具体的にどんなファイルでしょうか? 1行目だけが入らないとかそういう問題ではないですよね? (エクセルシートの最初の行はヘッダ扱いになって取り込まれないですけど・・・。) |
|
投稿日時: 2005-05-18 08:15
こんにちは。
過去に似たようなスレッドがいくつもあります。そちらを探してみてはどうでしょう。 あとExcelの実際のデータをいろいろ変えてテストしてみて下さい。 Excelの列に複数のデータ型が存在する場合は一番多い型が採用され、その他のデータは NULLになります。 それに応じたプログラムでの対策か運用での対策が必要だと思います。 |
|
投稿日時: 2005-05-19 23:04
返事を書くのが遅くなりましてすみません
>私の環境では動きますね。 エクセルファイルは具体的にどんなファイルでしょうか? 1つの列に数値型や日付型、文字型が入力されている形式です。 1つの列に同じ型の場合は、問題なく動作します。 説明が不十分で申し訳ありません。 >プログラムでの対策か運用での対策が必要だと思います。 これは、プログラムでの対策が可能なのでしょうか。 select文で取得する時にnullが入ってきたらどうしようも なくなるような気がするのですが まだまだ理解不足で申し訳ありません。 自分の方でも調べてはいるのですがいまいち分からなくて。。。 |
|
投稿日時: 2005-05-20 10:08
こんにちは
私のPCの環境ではわくさんと全く同じソースで数値も文字も取り込めました。 何が違うんでしょう・・・謎・・・ ちなみに私の環境は OS:Windows 2000 Pro VS 2003 Windows プログラム Microsoft Excel 2000 Excel9.OLBを参照しています http://support.microsoft.com/kb/194124/ この辺が参照になるでしょうか・・・ 一度エクセル内で全ての値を一度文字列に変換してしまってから取り込むとかどうでしょう? |
|
投稿日時: 2005-05-20 10:10
こんにちは。
こちらのスレッドを参考にしてみて下さい。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18124&forum=7 僕自身はこれで取込む事を確認しました。 >プログラムでの対策か運用での対策が必要だと思います。 については、 例えばプログラムで対象のExcelファイルの書式を統一してから取込む、 エラーの列があった行のデータはユーザーに画面で入力させる等でしょうか。 『IMEX=1』というのはドライバにインポート モードを使用するように指示して 混在データが文字列に変換されることを強制するもので、やってる事は大差ないです。 |
1