c# - for - Ayuda con una cadena de conexión OleDB para archivos excel
oledb connection string for excel 2016 (1)
Desafortunadamente, no puede establecer ImportMixedTypes
o TypeGuessRows
desde la cadena de conexión ya que esas configuraciones están definidas en el registro. Para el controlador ACE OleDb, se almacenan en
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/14.0/Access Connectivity Engine/Engines/Excel
en el registro. Por lo tanto, puede simplificar su cadena de conexión para:
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Users/Nick/Desktop/Pricing2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;""";
Una vez que establezca TypeGuessRows
en 0
e ImportMixedTypes
en Text
en el registro, debe obtener el comportamiento que espera. Sin embargo, podría considerar usar un número adecuadamente grande como 1000 en lugar de cero si encuentra que el rendimiento de importación es inferior al ideal.
El problema que tengo es que el adaptador de datos solo mira la primera fila de cada columna para determinar el tipo de datos. En mi caso, la primera columna "SKU" son los números de las primeras 500 filas y luego tengo SKU que son números y letras mixtas. Entonces, lo que termina sucediendo es que las filas en la columna de SKU se dejan en blanco, pero todavía obtengo la otra información para cada fila de columna.
Creo que es la cadena de conexión que controla eso y con mi configuración actual debería funcionar, pero no lo es.
Cadena de conexión:
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Users/Nick/Desktop/Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";
ImportMixedTypes=Text;TypeGuessRows=0
Deben ser las palabras clave importantes, mirar las filas 0 y simplemente usar texto como tipos de valor para todo.
El "bandaid" que he puesto en esto es hacer que la primera fila de la hoja de cálculo sea una mezcla de letras y números y específicamente dejar esa fila en mi consulta.