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

时间:2008-11-28 03:10:02

标签: .net excel ado.net automation

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

如果数据转换为常规Excel格式,则会在OK中读取。然而,这并不是一个真正的解决方案,因为它强加了一个必须采取的额外步骤,并且在最好的时候它们不会太计算机。

我能想到的唯一解决方案是使用Excel Automation创建新的电子表格,用相同的数据填充它,然后阅读那个。但ADO.NET似乎只能从磁盘上的文件中读取。我当然可以保存文件并在我完成后将其删除(我已经验证过它可以工作)。但我对弄乱他们的文件系统的想法感到不舒服。所以我的第一个问题是 - 有没有办法从内存中的Excel工作表填充DataTable?

此外,我不喜欢使用自动化的整个业务;它非常慢。即使不填充DataTable,操作也需要30秒以上。因此,使其变得更慢的解决方案不会有任何好处。这让我想到了第二个问题 - 有没有更好的方法来完成我在这里尝试的东西?

2 个答案:

答案 0 :(得分:1)

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

我在类似的场景中使用它。就我而言:......

  • 有人将excel的表格粘贴到剪贴板
  • 检索HTML文字
  • 使用HTML Agility返回查找TABLE,TR,TH,TD标签
  • 然后从中构建DataTable

在我的情况下,HTML一直存在于磁盘

答案 1 :(得分:0)

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

关于使用Excel Automation的解决方案,一旦在内存中有了工作表,就可以使用Value2属性将值转换为二维对象数组,然后使用它来构建DataTable。我不认为这样做会在使用自动化(需要创建Excel流程)的初始开销之外增加额外的开销。

有更好的方法吗?解析任意HTML并非易事,但如果您收到的文件格式一致,则可以解析它们。