19

DataTable.Merge() オプションを使用して複数の Excel ファイルをマージしようとしています

    For Each fileName As String In Directory.GetFiles("C:\TEMP\.", "*.xls")
        Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;""", fileName)
        Dim adapter As New OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString)
        Dim ds As New DataSet
        adapter.Fill(ds, "anyNameHere")
        Dim TempTable As DataTable
        TempTable = ds.Tables.Item("anyNameHere")
        table1.Merge(TempTable)
        MsgBox(fileName)
    Next
    DataGridView1.DataSource = table1
    MsgBox(table1.Rows.Count)

しかし、マージ中に次のエラーが発生します

<target>.ColumnName and <source>.ColumnName have conflicting properties: DataType property mismatch.

これは、Excel の 1 つの列がテキストとして読み取られ、別の列が double として読み取られ、両方に数値が含まれているためです。

これを回避するために、接続文字列で IMEX=1 についても言及しましたが、それでもこのエラーが発生します。

4

2 に答える 2

46

マージでMissingSchemaAction.IgnoreをMissingSchemaActionパラメーターとして使用します

table1.Merge(TempTable, True, MissingSchemaAction.Ignore)
于 2009-02-11T07:24:16.473 に答える
2

列が数値の場合は、その列をテキストとして扱うxlsファイルを修正してください。
データをマージするときに、列を構造的に同じにしませんか?

于 2009-02-11T07:22:10.720 に答える