不必特定于版本的 Excel 连接字符串
本文关键字:Excel 连接 字符串 版本 于版本 不必 | 更新日期: 2023-09-27 18:32:51
我正在尝试将我的 MSTest 单元测试连接到 Excel 文件(以便它们可以由数据驱动。
我尝试使用 csv 文件,除非我需要值为字符串,否则它们有效。
我想使用 Excel,但所有连接字符串都有一个Extended Properties='Excel xx.0;
其中 xx 是版本号。
在我工作的地方,我们安装了不同版本的Office。 我有2013年,仅此而已,其他人只有2010年。
是否有连接字符串连接到 excel 作为数据源,而无需使用特定版本?
这是我尝试过不起作用的示例:
[DataSource("System.Data.OleDB", @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=MyExcelFile.xlsx; Extended Properties='Excel 12.0;HDR=yes';", "Sheet1$", DataAccessMethod.Sequential)]
下面是我在切换到 ExcelDataReader 之前在项目中使用的 ACE 连接字符串:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;IMEX={1}
它似乎适用于来自多个版本的 Excel 的 xlsx 和 xls 文件。 您可以根据需要删除IMEX和/或添加HDR。 虽然它指定了 8.0 版,但它似乎适用于从 8.0 开始保存在任何版本中的文件。
如果您坚定地决定使用 ACE 驱动程序,那么试一试,看看它是否适合您。 但是,如果您所做的只是将Excel文件解析为应用程序的输入,那么我建议ExcelDataReader(http://exceldatareader.codeplex.com/)作为更好的选择。 它运行良好,可以处理xls和xlsx,如果需要,可以在DataSet/DataTable中为您提供结果,并且不依赖于Office或正在安装的独立ACE驱动程序。 它在 NuGet 上也可用。
下面是代码中外观的简单示例:
DataSet LoadDataSet()
{
using (Stream stream = File.OpenRead("MyExcelFile.xlsx"))
{
using (Excel.IExcelDataReader excelReader = Excel.ExcelReaderFactory.CreateOpenXmlReader(stream))
{
return excelReader.AsDataSet();
}
}
}