【问题标题】:Excel connection string that does not have to be version specific不必特定于版本的 Excel 连接字符串
【发布时间】:2013-09-26 15:05:00
【问题描述】:

我正在尝试将我的 MSTest 单元测试连接到 Excel 文件(以便它们可以数据驱动。)

我尝试过使用 csv 文件,它们可以工作 except when I need the values to be strings

我想使用 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 exceldatareader.codeplex.com。我在一个项目中使用了 ACE 驱动程序并且遇到了太多问题,尤其是当涉及到用户机器上的 32 位和 64 位 Office 时。我切换到 ExcelDataReader 并且对它非常满意。
  • 您可能还想查看epplus.codeplex.com,它是一个很好的用于读取/写入 xlsx 文件的库,与使用 sql 相比,使用该库时遇到的问题要少得多读取/写入excel文件的方式。

标签: c# .net datasource


【解决方案1】:

这是我在切换到 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();
        }
    }
}

【讨论】:

  • 你知道如何使用exceldatareader制作连接字符串吗?
  • 我添加了一个例子。祝你好运!
  • 唉,您的 Ace 示例对我不起作用,您的 ExcelDataReader 示例不使用连接字符串。 (我正在尝试为数据驱动的 MSTest 设置 DataSourceAttribute。)感谢您的帮助,但这些选项都没有为我工作。 +1 虽然付出了很大的努力。
  • 啊,我明白了。您不是在代码中操作 DataSet,而是将连接字符串声明为属性。所以如果你使用“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MyExcelFile.xlsx;Extended Properties='Excel 8.0;HDR=yes';”它不适用于您拥有的文件?
  • 我不得不使用 Excel 12.0,但它适用于 Office 2010 和 2013,所以我已经准备好了。感谢您的帮助!
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2013-09-15
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多