基本上我在VB.NET 2010中编写了一个Excel 2007项目,允许您创建具有相当大交互性的图表。我希望用户能够保存并重新打开此工作簿,并且在任何已创建的图表中仍然具有该交互性,因此他们不必重新创建它们。
当我创建图表时,我使用Sheet1.Controls.AddChart(...),它返回一个Microsoft.Office.Tools.Excel.Chart,我可以使用它来处理事件等。但是,当我重新打开文件并查看Sheet1.Controls集合时,没有Chart对象。当我需要工具图表时,通过Sheet1.ChartObjects.Chart访问图表会给我Interop Charts。
有更好的方法吗?我应该从一开始就使用Interop图表吗?
答案 0 :(得分:1)
根据MSDN article,您可以使用HasVstoObject和GetVstoObject方法转换native object into a host control.但是文档没有特别提及图表对象。
答案 1 :(得分:1)
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