使用LinqToExcel读取保存为xls格式的xlsx文件

5
请看这篇文章:Excel "外部表格格式不正确"。 我遇到了与该文章中描述的相同的问题,但我使用的是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来完成此任务,现在一切都正常工作了。


LinqToExcel同样适用于Excel 2007文件。您只需要使用Ace数据库引擎,该引擎在下面的答案中有解释。 - Paul
1个回答

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
@daniloquio LinqToExcel仍然可以读取Excel 2007文件。您只需要使用Ace数据库引擎即可。 - Paul
在64位系统上,将扩展名更改为xls或直接删除它。否则会出现相同的错误。从文档中可以看到:设置要使用的数据库引擎(以xlsx、xlsm和xlsb结尾的电子表格必须使用Ace数据库引擎)(如果运行64位,则默认为ACE(JET无论如何都不起作用),如果运行32位,则默认为JET)。 - Artiom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接