2012-02-08 10 views
1

データ変換の一部としてExcelシートからデータを読み取る必要があります。一部の列はほとんどが数値データですが、Excelシートのどこかに英数字データが含まれている場合があります。問題は、変換では英数字の値がnull(または空白)であることがわかります.ToString()メソッドを使用すると「」が返されます)。データセット内の列のデータ型を選択する方法

Excelに接続するには、oledb接続を作成し、OleDbDataAdapterを作成してから、DataSetをアダプタで埋めます。ここで

は、接続のためのVBのコードです:

private _oleadpt As OleDbDataAdapter 
private _oleconnection As New OleDbConnection 

     Dim olecomm As OleDbCommand     
     '_database comes from a settings file and is the full path to an excel document 
     Dim connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _database & ";Extended Properties=""Excel 8.0;HDR=YES;""" 
     _oleconnection.ConnectionString = connstring 

     olecomm = New OleDbCommand 
     olecomm.CommandText = "SELECT RegionalBranch, DocumentType, TiffFileNumberReference, VersionNumber, RTSItemNumber, ItemSearch, HeatNumber, RTSVendorNumber, PurchaseOrderNumber, Branch, " + _ 
      "Quality, CreationDate, CreationTime, ReceiverNumber, ChathamItemNumber, ChathamVendorNumber, ChathamDivision, Processed FROM [Sheet1$]" 
     olecomm.Connection = _oleconnection 

     _oleadpt = New OleDbDataAdapter(olecomm) 
     Dim commandBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(_oleadpt) 

     ds = New DataSet 
     _oleconnection.Open() 
     _oleadpt.Fill(ds) 

私はデータアダプタが、それは見て最初にしかし、多くの行に基づいて、列のデータ型を決定していると思います。それは、数字が私の問題の始まりである数値で列を決定します。

Excelで列の書式を変更しても、データセット内のデータ型には影響しないようです。

データアダプターまたはデータセットに、どのタイプのデータを列に使用するかを伝える方法はありますか?または、SQLステートメントでデータをキャストしようとする必要がありますか?

任意の助けもいただければ幸いです!

+0

この回答を参照してください。それはあなたを修正する必要があります:http://stackoverflow.com/questions/3081708/excel-cell-formatting-problem – codechurn

+0

ありがとう、それも有用でした。 –

答えて

2

私は上記のコメントをテストし、あなたがExcelファイルを読むためにMicrosoft.Jet.OLEDB.4.0プロバイダを使用している場合(このKBに記載されているように)、MaxScanScanRows = 0設定は無視されることがわかりました。ただし、Microsoft.ACE.OLEDB.12.0プロバイダに切り替えると、期待どおりに動作します。

+0

助けてくれてありがとう!それはジェット4.0ドライバは、常に私に役立たなかった正確に8行をスキャンするようだ。 ACE 12.0に変更しても問題は解決しませんでした。 maxscanrows = 0を追加してもソリューションは、IMEX = 1を接続文字列の拡張プロパティに追加することでした。それはすべての行をテキストとして扱い、最終的には私が望んでいたものです。この記事は私にとっても役に立ちました:http://www.connectionstrings.com/excel-2007私は正しい方向に私を送るために+1! –

+0

はい、申し訳ありませんが、明確でない場合。拡張プロパティでIMEX = 1およびMaxScanRows = 0が必要です。あなたはそれが働いてうれしい! – codechurn

関連する問題