2010-08-31 81 views
9

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

  1. 使用OLEDB提供
  2. 的Excel互操作对象
  3. 转储Excel数据的数据库,使用步骤

亲切指导我的选择。

+1

你的问题还不太清楚。阅读关于在此处询问SO问题:http://tinyurl.com/so-hints – Oded 2010-08-31 10:53:03

回答

17

这里是我的意见:

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,或在SO上搜索即可。很多这些库不需要机器上的MS Excel,如果您要将数据作为服务器进程的一部分提取,它们通常是最佳选择。

+0

另外,您无法在未安装Office的计算机上使用Excel Interop对象 – BornToCode 2014-06-25 11:39:35

+0

@BornToCode:感谢您的评论,我相应地编辑了我的答案。 – 2014-06-25 12:27:26

2

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

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

但是,首选选项通常是针对Excel 2007及更高版本使用Office Open XML。这并没有让你头痛的是Option 2,也没有任何问题与猜测行类型,因为你有选项1.

随着更仔细的问题,你可以得到一个更好的答案,虽然。

相关问题