2009-02-11 37 views
9

Estoy tratando de combinar múltiples archivos de Excel utilizando la opción DataTable.Mergeerror: <target> .ColumnName y <source> .ColumnName tienen propiedades en conflicto: Tipo de datos desajuste propiedad

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) 

(), pero da error, mientras que la fusión de

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

Esto se debe a que una columna en excel se lee como texto y otra como doble, mientras que ambas tienen valores numéricos.

Para evitar esto, también mencioné IMEX = 1 en la cadena de conexión, todavía aparece este error.

Respuesta

26

Uso MissingSchemaAction.Ignore como MissingSchemaAction parámetro en Combinar

table1.Merge(TempTable, True, MissingSchemaAction.Ignore) 
+0

Gracias, se trabaja – Venkat

+1

Nota: La pregunta y la respuesta es de VB.Net , por lo tanto, el verdadero usado es para mayúsculas –

0

Si las columnas son numéricas, corrija el archivo xls tratando esa columna como texto.
¿No le gustaría que las columnas sean estructuralmente iguales cuando fusiona los datos?

+1

Ambos son de tipo texto. pero cuando los archivos se leen usando ADO, decide la columna mirando los datos de los archivos. http://www.connectionstrings.com/excel-2007 Por lo que me HV añade IMEX = 1, pero todavía no está funcionando –

Cuestiones relacionadas