我们的客户端以Excel的HTML格式获取Excel文件。(这就是它到达的方式;没有人可以控制它。)然后我们需要根据文件中的数据运行报告。使用ADO.NET(OleDbReader)会导致“外部文件不是预期的格式”异常。
如果数据转换为常规Excel格式,则会在OK中读取。然而,这并不是一个真正的解决方案,因为它强加了一个必须采取的额外步骤,并且在最好的时候它们不会太计算机。
我能想到的唯一解决方案是使用Excel Automation创建新的电子表格,用相同的数据填充它,然后阅读那个。但ADO.NET似乎只能从磁盘上的文件中读取。我当然可以保存文件并在我完成后将其删除(我已经验证过它可以工作)。但我对弄乱他们的文件系统的想法感到不舒服。所以我的第一个问题是 - 有没有办法从内存中的Excel工作表填充DataTable?
此外,我不喜欢使用自动化的整个业务;它非常慢。即使不填充DataTable,操作也需要30秒以上。因此,使其变得更慢的解决方案不会有任何好处。这让我想到了第二个问题 - 有没有更好的方法来完成我在这里尝试的东西?
答案 0 :(得分:1)
尝试使用HTML Agility Pack:http://www.codeplex.com/htmlagilitypack
我在类似的场景中使用它。就我而言:......
在我的情况下,HTML一直存在于磁盘
答案 1 :(得分:0)
我不确定“Excel的HTML格式”是什么意思。最新版本的Excel具有XML文件格式,I Excel可以打开包含表格的HTML文件并将其转换为工作表,但Í不知道任何特定的Excel HTML格式。
关于使用Excel Automation的解决方案,一旦在内存中有了工作表,就可以使用Value2属性将值转换为二维对象数组,然后使用它来构建DataTable。我不认为这样做会在使用自动化(需要创建Excel流程)的初始开销之外增加额外的开销。
有更好的方法吗?解析任意HTML并非易事,但如果您收到的文件格式一致,则可以解析它们。