@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Excelからデータを取得する方法

1
投稿者投稿内容
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 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)
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2005-05-17 16:45
わくさんのソースをそのまま貼り付けたら
私の環境では動きますね。
エクセルファイルは具体的にどんなファイルでしょうか?
1行目だけが入らないとかそういう問題ではないですよね?
(エクセルシートの最初の行はヘッダ扱いになって取り込まれないですけど・・・。)
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-05-18 08:15
こんにちは。
過去に似たようなスレッドがいくつもあります。そちらを探してみてはどうでしょう。
あとExcelの実際のデータをいろいろ変えてテストしてみて下さい。

Excelの列に複数のデータ型が存在する場合は一番多い型が採用され、その他のデータは
NULLになります。

それに応じたプログラムでの対策か運用での対策が必要だと思います。
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-05-19 23:04
返事を書くのが遅くなりましてすみません


>私の環境では動きますね。
エクセルファイルは具体的にどんなファイルでしょうか?

1つの列に数値型や日付型、文字型が入力されている形式です。
1つの列に同じ型の場合は、問題なく動作します。
説明が不十分で申し訳ありません。

>プログラムでの対策か運用での対策が必要だと思います。

これは、プログラムでの対策が可能なのでしょうか。
select文で取得する時にnullが入ってきたらどうしようも
なくなるような気がするのですが

まだまだ理解不足で申し訳ありません。
自分の方でも調べてはいるのですがいまいち分からなくて。。。
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2005-05-20 10:08
こんにちは
私のPCの環境ではわくさんと全く同じソースで数値も文字も取り込めました。
何が違うんでしょう・・・謎・・・
ちなみに私の環境は
OS:Windows 2000 Pro
VS 2003
Windows プログラム
Microsoft Excel 2000
Excel9.OLBを参照しています

http://support.microsoft.com/kb/194124/

この辺が参照になるでしょうか・・・
一度エクセル内で全ての値を一度文字列に変換してしまってから取り込むとかどうでしょう?
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2005-05-20 10:10
こんにちは。

こちらのスレッドを参考にしてみて下さい。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18124&forum=7

僕自身はこれで取込む事を確認しました。

>プログラムでの対策か運用での対策が必要だと思います。

については、

例えばプログラムで対象のExcelファイルの書式を統一してから取込む、
エラーの列があった行のデータはユーザーに画面で入力させる等でしょうか。

『IMEX=1』というのはドライバにインポート モードを使用するように指示して
混在データが文字列に変換されることを強制するもので、やってる事は大差ないです。
1

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