1

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

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

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

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

4

2 回答 2

1

试试 HTML 敏捷包: http: //www.codeplex.com/htmlagilitypack

我在类似的场景中使用它。在我的情况下:...

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

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

于 2008-12-25T20:41:48.173 回答
0

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

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

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

于 2008-11-28T20:26:27.240 回答