2012-06-04 82 views
5

看看这个帖子:Excel "External table is not in the expected format."阅读XLSX保存为XLS与LinqToExcel

我在这个职位描述了同样的问题,但我使用LinqtoExcel读取该文件,而不是简单的查询。

将LinqToExcel等效于设置连接字符串作为该帖子的答案的建议是什么?

这里是我使用的代码:

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) 
{ ... 

而且我的问题是:“外部表不在预期的格式”在foreach开始。

编辑(我的问题已解决,但问题仍未解答):我正在使用EPPlus而不是LinqToExcel完成此任务,现在所有工作都正常。

+0

LinqToExcel适用于Excel 2007中的文件。您只需要使用Ace数据库引擎,这在下面的答案中进行了解释。 – Paul

回答

5

您将需要使用ACE数据库引擎而不是JET数据库引擎。

您可以通过设置DatabaseEngine属性对LinqToExcel执行此操作。这里有一个例子

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

谢谢!我没有发现任何像DatabaseEngine这样的属性,因为我使用的是LinqToExcel 1.0。我更新了LinqToExcel 1.6,现在那个房产就在那里;设置它允许我用LinqToSql读取有问题的文件。我会继续使用EPPlus,因为它更加面向对象。 LinqToExcel将是我选择纯粹的Excel 97/2003文件。 – daniloquio

+0

@daniloquio LinqToExcel仍然可以读取Excel 2007文件。你只需要使用Ace数据库引擎。在64bit上的 – Paul

+0

将扩展名更改为xls或只是将其删除。没有这个 - 同样的错误。 - 从文档:设置数据库引擎使用(以xlsx,xlsm和xlsb结尾的电子表格必须使用Ace数据库引擎)(如果运行64位,这默认为ACE(JET无法工作),如果运行32位这个退役给JET) – Artiom