哪一个是最好的OLEDB或Excel对象或数据库

时间:2010-08-31 10:48:39

标签: c#

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

  1. 使用OLEDB提供程序
  2. Excel互操作对象
  3. 将Excel数据转储到数据库并使用过程
  4. 请指导我选择。

2 个答案:

答案 0 :(得分:18)

以下是我的意见:

1。使用OLEDB提供程序

如果您拥有简单,统一的结构化表格,

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

2。 Excel互操作对象

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

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

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

其他选择:

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

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

答案 1 :(得分:2)

无论你如何提出问题,选项1和2几乎都是痛苦的练习。

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

但首选选项通常是在Excel 2007及更高版本中使用Office Open XML。这没有您使用选项2获得的COM头痛,也没有像使用选项1那样猜测行类型的问题。

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