【问题标题】:Control Excel Within WebBrowser Control在 WebBrowser 控件中控制 Excel
【发布时间】:2012-10-30 17:45:07
【问题描述】:

我正在尝试将 .xls 文件加载到我的 Windows 窗体应用程序中的网络浏览器控件中,以便我可以通过编程方式不断更新它。

因此,例如,当用户按下表单上的按钮时,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 控件,因为这就是我能找到的全部内容)和能够使用新数据不断更新“输入”表,以便输出表不断更新。

【问题讨论】:

  • 请坚持提出您的问题,并跳过所有大写字母大喊大叫以引起注意
  • 您的用户是否需要与摘要数据交互?如果不加载完整文件,汇总表的图像就足够了吗?您可以自动化 excel(甚至作为隐藏实例)来实现这一点。
  • 如果您可以在表单中嵌入 PDF 查看器来代替 Web 浏览器,则 Excel 可以将特定范围导出为 PDF,然后您可以将其加载到表单中。或者,您可以将这种导出图像的方法移植到您的 .NET 应用程序:vbadud.blogspot.com/2010/06/…
  • 这可以帮助您获得所需格式的剪贴板内容:csharphelp.com/2007/05/… C# 不是 VB,但应该可以翻译...
  • 刚刚尝试了 C# 解决方案,效果很好。

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


【解决方案1】:

只是为了完全回答这个问题,以便将来面临这一挑战的任何人都不必像我那样用头撞砖墙,并且会有一些东西来指导他们,这就是我最终要做的事情:

  1. 使用 Office.Interop 在后台打开我的 Excel 工作簿一次 - 这使我能够处理数据并使用 Excel 的计算引擎非常快速地更新数据。
  2. 在我的表单中添加了一个 Panel 内的 PictureBox 并设置 Panel 的 autoscroll = True

用于显示 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 的出色指导和 cmets - 谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 2011-07-28
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多