0

我正在尝试将我的 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)]
4

1 回答 1

2

这是我在切换到 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();
        }
    }
}
于 2013-09-26T15:25:21.827 回答