Диаграмма в Excel посредством Visual Basic .NET

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Диаграмма в Excel посредством Visual Basic .NET

Сообщение MAGRAV » 25.02.2011 (Пт) 9:29

Добрый день! У меня возникла необходимость построения декартовой диаграммы в Excel, не используя встроенный язык VBA. Нужно осуществить это средствами VB .NET. Но к сожалению не располагаю достаточным опытом в этом языке чтобы справиться самостоятельно. Я на неё решил перейти с VB6. Такую задачу я уже решал посредством VBA. Код приведен ниже:

Код: Выделить всё
Dim oChart As Chart

Public Sub BildChart()
 
    SK = "Nэл = f(n1пр)"
    OsbX = "U4:U100": PodpisbX = "n1пр,%"
    OsbY = "V4:V100": PodpisbY = "Nэл, МВт"
    Application.DisplayAlerts = False ' Это свойство позволяет отключить показ различных предупреждений
   Set oChart = ActiveWorkbook.Charts.Add(, ActiveSheet) ' Создание диаграммы
    oChart.ChartType = xlXYScatterSmooth ' Тип диаграммы
    oChart.Name = SK ' Имя диаграммы
    oChart.SizeWithWindow = False 'Размер диаграммы будет подогнан таким образом, чтобы точно соответство-вать размеру листа
    oChart.Tab.ColorIndex = 35 ' Настройка внешнего вида вкладки диаграммы в книге
    oChart.HasLegend = False
    oChart.SetSourceData Source:=Sheets("Результаты расчёта").Range(OsbX, OsbY), PlotBy:=xlColumns
    With Charts(SK)
      .HasTitle = True
      .ChartTitle.Text = SK
    End With
    With ActiveChart.Axes(xlValue) 'форматирование по оси Y
      .HasTitle = True
     With .AxisTitle
        .Caption = PodpisbY
        .Font.Name = "Arial Cyr"
        .Font.Size = 10
      End With
    End With
    With ActiveChart.Axes(xlCategory) 'форматирование по оси X
      .HasTitle = True
      With .AxisTitle
        .Caption = PodpisbX
        .Font.Name = "Arial Cyr"
        .Font.Size = 10
      End With
      .HasMajorGridlines = True
      .MajorGridlines.Border.Color = RGB(0, 0, 0)
      .MajorGridlines.Border.LineStyle = xlContinuous
    End With
    Application.Wait (Now + TimeValue("0:00:1")) ' позволяет приостановить выполнение операций на время

  ActiveWorkbook.Charts("Диаграмма1").Tab.ColorIndex = 35
  ActiveWorkbook.Charts("Диаграмма2").Tab.ColorIndex = 35
  Application.DisplayAlerts = True ' Это свойство позволяет отключить показ различных предупреждений
End Sub


Помогите пожалуйста осуществить эту задачу посредством VB .NET!
[Viper] :: Для форматирования кода используй тэги CODE, а не ручное раскрашивание в разные цвета! Предупреждение.
Уходя с аэродрома прихвати деталь для дома.

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Диаграмма в Excel посредством Visual Basic .NET

Сообщение MAGRAV » 25.02.2011 (Пт) 9:31

:!:
Вложения
Диаграмма в Excel.jpg
В результате получалась вот такая диаграмма.
Диаграмма в Excel.jpg (58.58 Кб) Просмотров: 3935
Уходя с аэродрома прихвати деталь для дома.

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Диаграмма в Excel посредством Visual Basic .NET

Сообщение MAGRAV » 11.03.2011 (Пт) 7:14

Сделал я эту задачу в VB .NET. Сам разобрался за 3 дня.

Код: Выделить всё
    Public Sub BildChart(ByVal xlsSheet As Microsoft.Office.Interop.Excel.Worksheet, _
                         ByVal xlsBook As Microsoft.Office.Interop.Excel.Workbook, _
                         ByVal xlsApp As Microsoft.Office.Interop.Excel.Application)
        Dim xlsRange As Microsoft.Office.Interop.Excel.Range
        Dim oChart As Microsoft.Office.Interop.Excel.Chart
        Dim oSeries As Microsoft.Office.Interop.Excel.Series
        Dim SeriesCol As Microsoft.Office.Interop.Excel.SeriesCollection
        Dim SK As String
        Dim OsbX As Microsoft.Office.Interop.Excel.Range
        Dim OsbY As Microsoft.Office.Interop.Excel.Range
        Dim PodpisbX As String
        Dim PodpisbY As String

        'xlsApp.ReferenceStyle = Microsoft.Office.Interop.Excel.XlReferenceStyle.xlR1C1 'Стиль ссылок "R1C1"
        SK = "Prof"
        'OsbX = "=Prof!R4C3:R100C3"
        'OsbY = "=Prof!R4C4:R100C4"
        'xlsApp.ReferenceStyle = Microsoft.Office.Interop.Excel.XlReferenceStyle.xlR1C1
        PodpisbX = "X"
        PodpisbY = "Y"
        'Application.DisplayAlerts = False ' Это свойство позволяет отключить показ различных предупреждений

        oChart = xlsBook.Charts.Add ' Создание диаграммы
        oChart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatterSmooth ' Тип диаграммы
        oChart.Name = SK ' Имя диаграммы
        oChart.SizeWithWindow = False 'Размер диаграммы будет подогнан таким образом, чтобы точно соответство-вать размеру листа
        oChart.Tab.ColorIndex = 35 ' Настройка внешнего вида вкладки диаграммы в книге
        oChart.HasLegend = False


        OsbX = xlsSheet.Range(xlsSheet.Cells(4, 3), xlsSheet.Cells(100, 3))
        OsbY = xlsSheet.Range(xlsSheet.Cells(4, 4), xlsSheet.Cells(100, 4))
        xlsRange = xlsApp.Union(OsbX, OsbY)
        'oChart.SeriesCollection(1)
        'oChart.SeriesCollection(1).Name = "1"

        'SeriesCol = oChart.SeriesCollection
        'oSeries = SeriesCol.NewSeries
        'oSeries.Name = "первый"
        'oChart.SeriesCollection(1)
        'oSeries.XValues = OsbX
        'oSeries.Values = OsbY
        oChart.SetSourceData(Source:=xlsRange, PlotBy:=Microsoft.Office.Interop.Excel.XlRowCol.xlColumns)
        oSeries = oChart.SeriesCollection(1)
        oSeries.Name = "первый"

        With oChart
            '.HasTitle = True 'Наличие заголовка диаграммы
            '.ChartTitle.Text = SK 'Текст заголовка диавграммы
        End With
        With oChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlValue) 'форматирование по оси Y
            .HasTitle = True
            With .AxisTitle
                .Caption = PodpisbY
                .Font.Name = "Arial Cyr"
                .Font.Size = 10
                '.Characters(2, 2).Font.Italic = True
                '.Characters(2, 2).Font.Size = 8
            End With
        End With
        With oChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlCategory) 'форматирование по оси X
            .HasTitle = True
            With .AxisTitle
                .Caption = PodpisbX
                .Font.Name = "Arial Cyr"
                .Font.Size = 10
            End With
            .HasMajorGridlines = True
            .MajorGridlines.Border.Color = RGB(0, 0, 0)
            .MajorGridlines.Border.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
        End With
        oChart.Tab.ColorIndex = 35 'Окраска вкладки диаграммы
        'Application.DisplayAlerts = True ' Это свойство позволяет отключить показ различных предупреждений
        'xlsApp.ReferenceStyle = Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1 'Стиль ссылок "A1"

    End Sub


Только ну никак не могу разобраться с тем, чтобы на одной диаграмме выводить несколько рядов данных. Получалось только замещать предыдущий – последующим.
Помогите пожалуйста разобраться с рядами SeriesCollection?!
Уходя с аэродрома прихвати деталь для дома.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Диаграмма в Excel посредством Visual Basic .NET

Сообщение FireFenix » 11.03.2011 (Пт) 19:38

Добавить Series с содержанием выбранных точек в oChart.SeriesCollection
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Диаграмма в Excel посредством Visual Basic .NET

Сообщение MAGRAV » 14.03.2011 (Пн) 6:39

Разобрался. Более менее окончательный пример кода ниже:

Код: Выделить всё
Public Sub BildChart(ByVal xlsSheet As Microsoft.Office.Interop.Excel.Worksheet, _
                         ByVal xlsBook As Microsoft.Office.Interop.Excel.Workbook, _
                         ByVal xlsApp As Microsoft.Office.Interop.Excel.Application, _
                         ByVal ChisloSech As Integer, _
                         ByVal Nomer() As Integer)
        Dim xlsRange As Microsoft.Office.Interop.Excel.Range
        Dim oChart As Microsoft.Office.Interop.Excel.Chart
        Dim oSeries As Microsoft.Office.Interop.Excel.Series
        Dim SeriesCol As Microsoft.Office.Interop.Excel.SeriesCollection
        Dim SK As String
        Dim OsbX As Microsoft.Office.Interop.Excel.Range
        Dim OsbY As Microsoft.Office.Interop.Excel.Range
        Dim PodpisbX As String
        Dim PodpisbY As String

        'xlsApp.ReferenceStyle = Microsoft.Office.Interop.Excel.XlReferenceStyle.xlR1C1 'Стиль ссылок "R1C1"
        SK = "Prof"
        'xlsApp.ReferenceStyle = Microsoft.Office.Interop.Excel.XlReferenceStyle.xlR1C1
        PodpisbX = "X"
        PodpisbY = "Y"
        'Application.DisplayAlerts = False ' Это свойство позволяет отключить показ различных предупреждений

        oChart = xlsBook.Charts.Add ' Создание диаграммы
        oChart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatterSmooth ' Тип диаграммы "Декартова"
        oChart.Name = SK ' Имя диаграммы
        oChart.SizeWithWindow = False 'Размер диаграммы будет подогнан таким образом, чтобы точно соответство-вать размеру листа
        oChart.Tab.ColorIndex = 35 ' Настройка внешнего вида вкладки диаграммы в книге
        oChart.HasLegend = True

        'Добавление на диаграмму первого сечения
        OsbX = xlsSheet.Range(xlsSheet.Cells(4, 3), xlsSheet.Cells(Nomer(1) + 3, 3))
        OsbY = xlsSheet.Range(xlsSheet.Cells(4, 4), xlsSheet.Cells(Nomer(1) + 3, 4))
        xlsRange = xlsApp.Union(OsbX, OsbY)
        oChart.SetSourceData(Source:=xlsRange, PlotBy:=Microsoft.Office.Interop.Excel.XlRowCol.xlColumns)
        oChart.SeriesCollection(1).Name = "sech1_spin" '.CharSeriesName
        'Добавление на диаграмму последующего сечения
        With oChart
            .SeriesCollection.NewSeries()
            .SeriesCollection(2).Name = "sech1_kor"
            .SeriesCollection(2).XValues = "=Results!R" + Convert.ToString(4) + "C" + Convert.ToString(5) + ":R" + Convert.ToString(Nomer(1) + 3) + "C" + Convert.ToString(5)
            .SeriesCollection(2).Values = "=Results!R" + Convert.ToString(4) + "C" + Convert.ToString(6) + ":R" + Convert.ToString(Nomer(1) + 3) + "C" + Convert.ToString(6)
        End With
        With oChart
            '.HasTitle = True 'Наличие заголовка диаграммы
            '.ChartTitle.Text = SK 'Текст заголовка диавграммы
        End With
        With oChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlValue) 'форматирование по оси Y
            .HasTitle = True
            With .AxisTitle
                .Caption = PodpisbY
                .Font.Name = "Arial Cyr"
                .Font.Size = 10
                '.Characters(2, 2).Font.Italic = True
                '.Characters(2, 2).Font.Size = 8
            End With
        End With
        With oChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlCategory) 'форматирование по оси X
            .HasTitle = True
            With .AxisTitle
                .Caption = PodpisbX
                .Font.Name = "Arial Cyr"
                .Font.Size = 10
            End With
            .HasMajorGridlines = True
            .MajorGridlines.Border.Color = RGB(0, 0, 0)
            .MajorGridlines.Border.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
        End With
        oChart.Tab.ColorIndex = 35 'Окраска вкладки диаграммы
        'Application.DisplayAlerts = True ' Это свойство позволяет отключить показ различных предупреждений
        'xlsApp.ReferenceStyle = Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1 'Стиль ссылок "A1"

    End Sub


Помогите разобраться с тем, чтобы принудительно форматировать линии и точки рядов данных?! Ну к примеру цвет линии и размер точки...!
Уходя с аэродрома прихвати деталь для дома.

raserg
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 24.01.2009 (Сб) 0:35
Откуда: Одесса

Re: Диаграмма в Excel посредством Visual Basic .NET

Сообщение raserg » 14.03.2011 (Пн) 12:11

Код: Выделить всё
With oChart.SeriesCollection(1)

.Format.Line.ForeColor.RGB = 125
.MarkerForegroundColor = 44
.MarkerBackgroundColorIndex = 44

End With

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Диаграмма в Excel посредством Visual Basic .NET

Сообщение MAGRAV » 23.03.2011 (Ср) 9:15

raserg! А можете написать ещё подобных примеров тонкого форматирования диаграммы?! Или хотябы обратить внимание куда смотреть чтоб разобраться.... :?:
Уходя с аэродрома прихвати деталь для дома.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList