1
Private Sub readexcel()
    Dim cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & txtFileName.Text & "; Extended Properties=Excel 12.0;")

    Dim oconn As New OleDbCommand("select * from [Sheet1$]", cnn)
    cnn.Open()
    Dim adp As New OleDbDataAdapter(oconn)
    Dim dt As New DataTable()
    Dim ds As DataSet
    adp.Fill (dt)

    dgvExcelData.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    dgvExcelData.EditMode = DataGridViewEditMode.EditProgrammatically
    dgvExcelData.DataSource = dt
End Sub

上記のコードは Excel をグリッド ビューに読み込みますが、一部のデータが欠落します。誰かが理由を教えてもらえますか?

ここに画像の説明を入力

4

1 に答える 1

2

デフォルトでは、ACE はデータの最初の 8 行を読み取り、それを使用して各列のデータ型を決定します。

列内のこれらの 8 行のデータが同じタイプである場合、そのタイプが想定されます。それ以外の場合は、デフォルトでテキストが想定されます。8列以降はチェックしません。

列にデータ型が混在している場合は、レジストリを少し変更する必要があります。

に行く

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel

キーの値をTypeGuessRowsから8に変更します0

ここに画像の説明を入力

以下のコードをテストします

Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
    Dim strCon As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & txtFileName.Text &
                           "; Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1;"""

    Dim cnn As New OleDbConnection(strCon)

    Dim oconn As New OleDbCommand("select * from [Sheet1$]", cnn)
    cnn.Open()

    Dim adp As New OleDbDataAdapter(oconn)
    Dim dt As New DataTable()
    adp.Fill(dt)

    dgvExcelData.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    dgvExcelData.EditMode = DataGridViewEditMode.EditProgrammatically
    dgvExcelData.DataSource = dt
End Sub

そして、これが出力です

ここに画像の説明を入力

于 2013-04-26T19:36:19.080 に答える