如何从内存Excel工作表中填充DataTable

我们的客户以Excel的HTML格式获取Excel文件(这是它到达的方式;没有人能控制这个)。然后我们需要根据文件中的数据运行一个报告。 使用ADO.NET(OleDbReader)导致“外部文件不是预期格式”exception。

如果数据转换为常规的Excel格式,则可以按OK读取。 然而,这不是一个真正的解决scheme,因为它需要采取额外的措施,而且在最好的时候也不会太电脑化。

我能想出的唯一解决scheme是使用Excel自动化来创build一个新的电子表格,用相同的数据填充它,然后读取它。 但ADO.NET似乎只能从磁盘上的文件读取。 我当然可以保存文件,并删除它,当我完成它(我已经validation将工作)。 但是我对用文件系统搞乱的想法感到不自在。 所以我的第一个问题是 – 有没有办法从一个内存的Excel工作表填充一个DataTable?

另外,我不喜欢使用自动化的整个业务。 这是非常缓慢的。 即使没有填写DataTable,操作也需要30秒。 所以一个让它变慢的解决scheme不会有什么好处。 这使我想到了第二个问题 – 有没有更好的方法来完成我在这里尝试的?

试试HTML Agility Pack: http : //www.codeplex.com/htmlagilitypack

我在类似的情况下使用它。 就我而言:…

  • 有人从excel粘贴到剪贴板
  • 检索HTML文本
  • 使用HTML Agility来查找TABLE,TR,TH,TD标签
  • 然后从中构buildDataTable

在我的情况下,HTML不会永久保存到磁盘上

我不确定“Excel的HTML格式”是什么意思。 最近版本的Excel有一个XML文件格式,我可以打开一个包含表格的HTML文件并将其转换为工作表,但不知道任何特定的Excel HTML格式。

关于使用Excel自动化的解决scheme,一旦您在内存中有一个工作表,您可以使用Value2属性将值获取到一个2维的对象数组中,然后使用它来构build一个DataTable。 我不认为这样做会在使用Automation的初始开销(需要创build一个Excel进程)之上增加额外的开销。

有没有更好的办法? parsing任意的HTML并不是微不足道的,但是如果您收到的文件具有一致的格式,则可以parsing它们。