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ステートメントでデータをキャストする必要がありますか?

どんな助けでも大歓迎です!

4

1 に答える 1

2

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

于 2012-02-09T01:35:18.893 に答える