2

我正在尝试将 .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 控件,因为这就是我能找到的全部)并有能力使用新数据不断更新“输入”表,以便输出表不断更新。

4

1 回答 1

2

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

  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% 感谢蒂姆威廉姆斯的惊人指导和评论 - 谢谢!

于 2012-10-31T14:45:14.043 回答