12

我需要使用 Excel 2007 文件来读取数据。对于哪一个是最好的方法:

  1. 使用 OLEDB 提供程序
  2. Excel 互操作对象
  3. 将 Excel 数据转储到数据库并使用过程

请指导我选择。

4

2 回答 2

19

以下是我的意见:

1. 使用 OLEDB 提供程序

只有当您拥有简单、统一的结构化表格时,才会满足您的需求。例如,如果您必须提取任何单元格格式信息,它对您没有多大帮助。Jet 引擎的错误“行类型猜测”算法可能使这种方法几乎无法使用。但是如果可以从每个表的前几行中唯一地标识数据类型,那么这种方法可能就足够了。优点:速度很快,甚至可以在没有安装 MS Excel 的机器上运行。

2. Excel 互操作对象

可能会很慢,尤其是与选项 1 相比,并且您需要安装 MS Excel。但是您可以完全访问 Excel 的对象模型,您可以提取存储在 Excel 文件中的几乎所有信息(例如:格式信息、颜色、框架等),并且您的工作表可以按照您的需要进行复杂的结构。

3. 将 Excel 数据转储到数据库并使用过程

取决于您想到哪种数据库转储,以及您手头是否有数据库系统。如果您正在考虑 MS 访问,这将再次在内部使用 Jet 引擎,其优缺点与上述方法 1 相同。

其他选项:

4. 编写一个 Excel VBA 宏来读取您需要的数据并将其写入文本文件。从 C# 程序中读取文本文件。优点:比方法 2 快得多,在访问元信息方面具有相同的灵活性。缺点:您必须将程序拆分为 VBA 部分和 C# 部分。你的机器上需要 MS Excel。

5. 为此任务使用第三方库/组件。有很多图书馆适合这项工作,免费的和商业的。只需询问 Google,或在此处搜索 SO。许多这些库不需要机器上的 MS Excel,如果您要将数据作为服务器进程的一部分提取,它们通常是最佳选择。

于 2010-10-07T21:10:55.687 回答
2

无论您如何提出问题,选项 1 和 2 几乎总是一种痛苦的练习。

如果您可以使用 SSIS 将数据移动到数据库中,并且由于其他要求而符合您的需求,那么这也是一个不错的选择。

但首选选项通常是使用 Office Open XML for Excel 2007 及更高版本。这没有您使用选项 2 时遇到的 COM 问题,也没有您使用选项 1 时遇到的猜测行类型的问题。

但是,通过更精心设计的问题,您可以获得更好的答案。

于 2010-08-31T11:43:58.137 回答