Могу ли я превратить объект Microsoft.Office.Interop.Excel.Chart в объект Microsoft.Office.Tools.Excel.Chart? - PullRequest
1 голос
/ 05 августа 2010

По сути, я кодировал проект Excel 2007 в VB.NET 2010, который позволяет создавать диаграммы с достаточным количеством интерактивности. Я хочу, чтобы пользователь мог сохранять и повторно открывать эту книгу и по-прежнему иметь эту интерактивность в любых уже созданных диаграммах, поэтому ему не нужно создавать их заново.

Когда я создаю диаграммы, я использую Sheet1.Controls.AddChart (...), который возвращает Microsoft.Office.Tools.Excel.Chart, с помощью которого я могу обрабатывать события и тому подобное. Однако, когда я снова открываю файл и просматриваю коллекцию Sheet1.Controls, объекты Chart отсутствуют. Доступ к графикам через Sheet1.ChartObjects.Chart дает мне Interop Charts, когда мне нужны инструменты.

Есть ли лучший способ сделать это? Должен ли я использовать графики Interop с самого начала?

Ответы [ 2 ]

1 голос
/ 06 августа 2010

Пол, я заранее извиняюсь, если не решу вашу проблему.До сих пор я не осознавал, что существует два типа графиков, и мне было бы интересно разобраться с ними.В любом случае, после некоторой дурачливости я смог создать диаграмму, назвать ее, сохранить ее и заставить ее реагировать на события.Тем не менее, он полагается на графики взаимодействия:

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
1 голос
/ 05 августа 2010

Согласно статье MSDN , вы можете использовать методы HasVstoObject и GetVstoObject для преобразования собственного объекта в элемент управления хоста. хотя.

...