.net 如何从内存中的Excel工作表填写数据表

.net 如何从内存中的Excel工作表填写数据表,.net,excel,ado.net,automation,.net,Excel,Ado.net,Automation,我们的客户以Excel的HTML格式获取Excel文件。(这就是它的到达方式;没有人可以控制它。)然后我们需要根据文件中的数据运行报告。使用ADO.NET(OleDbReader)会导致“外部文件不是预期格式”异常 如果数据转换为常规Excel格式,则读取结果为OK。然而,这并不是一个真正的解决方案,因为它要求他们必须采取额外的步骤,而且他们在最好的时候也不太懂计算机 我能想到的唯一解决方案是使用Excel Automation创建一个新的电子表格,用相同的数据填充它,然后改为读取该电子表格。但

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

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

我能想到的唯一解决方案是使用Excel Automation创建一个新的电子表格,用相同的数据填充它,然后改为读取该电子表格。但是ADO.NET似乎只能从磁盘上的文件读取。当然,我可以保存文件并在处理完后将其删除(我已经验证了这一点)。但是我不喜欢在他们的文件系统上乱搞。所以我的第一个问题是-有没有一种方法可以从内存中的Excel工作表填充数据表


此外,我不喜欢使用自动化的整个业务;速度太慢了。即使不填充数据表,操作也需要30秒以上。因此,一个让它变得更慢的解决方案不会有任何好处。这就引出了我的第二个问题——有没有更好的方法来完成我在这里尝试的内容?

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

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


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

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

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


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

试试HTML敏捷包:

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

  • 有人将excel中的表格粘贴到剪贴板中
  • 检索HTML文本
  • 使用HTML Agility back查找表、TR、TH、TD标记
  • 然后从中构造数据表

在我的情况下,任何时候都不会将HTML持久化到磁盘

尝试HTML Agility Pack:

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

  • 有人将excel中的表格粘贴到剪贴板中
  • 检索HTML文本
  • 使用HTML Agility back查找表、TR、TH、TD标记
  • 然后从中构造数据表
在我的例子中,HTML在任何时候都不会持久化到磁盘