2012-06-04 34 views
5

mirada a este post: Excel "External table is not in the expected format."lectura xlsx guardado como XLS con LinqToExcel

Tengo el mismo problema representado en ese puesto, pero estoy usando LinqtoExcel a leer el archivo en vez de consultas simples.

¿Cuál sería el equivalente de LinqToExcel para establecer la cadena de conexión como lo sugiere la respuesta a esa publicación?

Aquí está el código que estoy utilizando:

var excelOM = new ExcelQueryFactory(pPathArchivoOM); 
var despachosClient = from c in excelOM.Worksheet<RegistroDespachoOM>("Tabla_1") 
         where c.DESTINAT.Contains("SOMETEXT") 
         select c; 
//Identificar los despachos asociados a números de documento sin datos aún. 
foreach (RegistroDespachoOM despacho in despachosClient) 
{ ... 

y mi problema es: "La tabla externa no está en el formato esperado" en el inicio foreach.

EDITAR (mi problema está resuelto pero la pregunta sigue sin respuesta): Estoy usando EPPlus en lugar de LinqToExcel para esta tarea y todo está funcionando bien ahora.

+0

LinqToExcel también funciona para archivos de Excel 2007. Solo necesita usar el motor de la base de datos Ace, que se explica en la respuesta a continuación. – Paul

Respuesta

5

Deberá usar el motor de la base de datos ACE en lugar del motor de la base de datos JET.

Puede hacer esto con LinqToExcel estableciendo la propiedad DatabaseEngine. Aquí hay un ejemplo

var excelOM = new ExcelQueryFactory(pPathArchivoOM); 
excelOM.DatabaseEngine = DatabaseEngine.Ace; 
+1

¡Gracias! No encontré ninguna propiedad como DatabaseEngine porque estaba usando LinqToExcel 1.0. Actualicé a LinqToExcel 1.6 y ahora esa propiedad está allí; configurarlo me permitió leer el archivo problemático con LinqToSql. Sin embargo, seguiré usando EPPlus porque está más orientado a objetos. LinqToExcel will es mi opción para los archivos pure excel 97/2003. – daniloquio

+0

@daniloquio LinqToExcel todavía puede leer archivos de Excel 2007. Solo necesitas usar el motor de la base de datos Ace. – Paul

+0

en 64 bits cambie la extensión a xls o simplemente elimínela. Sin eso, el mismo error. - - - - De la documentación: establece el motor de base de datos a usar (las hojas de cálculo que terminan en xlsx, xlsm y xlsb deben usar el motor de base de datos Ace) (si ejecuta 64 bits, esto es ACE (JET no funciona de todos modos), si se ejecuta 32 bit esto se desvincula a JET) – Artiom

Cuestiones relacionadas