我可以将Microsoft.Office.Interop.Excel.Chart对象转换为Microsoft.Office.Tools.Excel.Chart对象吗?

基本上我已经在VB.NET 2010中编写了一个Excel 2007项目,允许您创build具有相当数量的交互性的图表。 我希望用户能够保存并重新打开这个工作簿,并且在任何已经创build的图表中仍然具有交互性,所以他们不必重新创build它们。

当我创build图表时,我使用Sheet1.Controls.AddChart(…),它返回一个Microsoft.Office.Tools.Excel.Chart,我可以处理事件等。 但是,当我重新打开文件并查看Sheet1.Controls集合时,没有Chart对象。 当我需要工具图表时,通过Sheet1.ChartObjects.Chart访问图表给了我互操作图表。

有一个更好的方法吗? 我应该从一开始就使用Interop图表吗?

根据MSDN文章 ,您可以使用HasVstoObject和GetVstoObject方法将本地对象转换为主机控件。 虽然文档没有具体提到图表对象。

保罗,如果我没有解决你的问题,我提前道歉。 直到现在我还没有意识到有两种types的图表,我有兴趣了解与他们的问题。 无论如何,经过一些鬼混之后,我能够创build一个图表,命名它,让它持续下去,并对事件做出反应。 它确实依赖于互操作图:

Public Class ThisWorkbook Dim clsChart As cChart Private Sub ThisWorkbook_Startup() Handles Me.Startup Dim coChartObj As Microsoft.Office.Interop.Excel.ChartObject Dim chtMyChart As Microsoft.Office.Interop.Excel.Chart Dim i As Int32 With Globals.Sheet1 For i = 1 To .ChartObjects.count If .ChartObjects(i).Name = "MyChart" Then chtMyChart = .ChartObjects(i).chart Exit For End If Next i If chtMyChart Is Nothing Then chtMyChart = .Shapes.AddChart.Chart chtMyChart.SetSourceData(.Range("A1:B2")) coChartObj = chtMyChart.Parent coChartObj.Name = "MyChart" End If clsChart = New cChart clsChart.chtChart = chtMyChart End With End Sub End Class Public Class cChart Public WithEvents chtChart As Microsoft.Office.Interop.Excel.Chart Private Sub chtChart_Resize() Handles chtChart.Resize MessageBox.Show("resize") End Sub End Class