在WebBrowser控件中控制Excel

时间:2012-10-30 17:45:08

标签: c# .net vb.net excel interop

我正在尝试将.xls文件加载到我的Windows窗体应用程序中的webbrowser控件中,以便我可以通过编程方式继续使用数据进行更新。

因此,例如,当用户按下表单上的按钮时,Excel工作表中的数据会更新。

我设法很容易将数据加载到控件中:

WebBrowser1.Navigate(PathToXLSFile)

而且,根据我在网上看到的内容,我现在应该可以使用以下内容来控制该表:

Dim wb As Object
WebBrowser1.Navigate(PathToXLSFile)
wb = WebBrowser1.Document

现在,我已尝试将最后一行代码放入WebBrowser1_DocumentCompleted WebBrowser1_Navigated模块中,但对于两者,我得到WebBrowser1.Document = Nothing

我已在网上找到并找到thisthisthis等解决方案,但这些解决方案都不适用于我。

同样,我想要做的是将Excel工作表加载到webbrowser控件(或者如果你有更好的想法,则加载另一个控件),并且能够通过.NET编辑/更改它。


至于我的完整场景(为什么我需要这个):

基本上,我的程序会生成大量数据,最终用户希望以特定方式(经常更改)看到格式化,所以我所做的是创建一个格式化的Excel工作表,其中公式引用回到表上的表不同的excel表。 这样,我的所有程序需要做的就是将所有计算值吐出到表中,然后数据就可供用户查看(并且非常容易定制,而不会弄乱我的程序)。

现在的挑战是,他们希望在Windows窗体上看到批次这些数据的迭代,所以,基本上我需要做的是每次他们想要查看新数据,计算它在飞行中并重新显示给他们。

我发现由于格式复杂,DataGridView在这里很难使用,所以我要做的就是向他们展示“输出”表(通过webBrowser控件,因为这就是我能找到的所有内容)和能够使用新数据不断更新“输入”表,以便输出表不断更新。

1 个答案:

答案 0 :(得分:2)

只是要完全回答这个问题,所以任何未来面临这一挑战的人都不会像我一样对抗砖墙,并且会有一些指导他们的东西,这就是我最终做的事情:

  1. 使用Office.Interop在后台打开我的Excel工作簿一次 - 这使我可以操作数据并使用Excel的计算引擎非常快速地更新数据。
  2. 在Panel中添加了PictureBox,并设置了Panel的autoscroll = True
  3. 用于显示Excel输出的代码:

    Dim MyRange As Microsoft.Office.Interop.Excel.Range
    
    ... code ...
    
    MyRange.CopyPicture(Microsoft.Office.Interop.Excel.XlPictureAppearance.xlScreen,Microsoft.Office.Interop.Excel.XlCopyPictureFormat.xlBitmap)
    
    If Clipboard.GetDataObject IsNot Nothing Then
       Dim Data As IDataObject = Clipboard.GetDataObject
    
       If Data.GetDataPresent(DataFormats.Bitmap) Then
           Dim img As Image = Data.GetData(DataFormats.Bitmap, True)
    
           PictureBox1.Height = img.Height
           PictureBox1.Width = img.Width
           PictureBox1.Image = img
       End If
    End If
    

    我绝对会喜欢说,这个答案是100%,感谢Tim Williams的惊人方向和评论 - 谢谢!