[VB.NET]產生折線圖及直方圖

在做統計報表的時後,需要產生折線圖及直方圖的範例
傳入的TempDT的DataTable格式

在做統計報表的時後,需要產生折線圖及直方圖的範例
傳入的TempDT的DataTable格式
並加入Owc11dll參考

年份欄位1欄位2
2007  
2008  

 

Imports OWC11
Imports MSComctlLib

''' <summary>
    ''' 折線圖
    ''' </summary>
    ''' <param name="TempDt"></param>
    ''' <param name="DepName"></param>
    ''' <param name="angeName"></param>
    ''' <remarks></remarks>
    Sub GetGDPChart(ByVal TempDt As Data.DataTable, ByVal DepName As String, ByVal angeName As String)

        Dim strXdata As String = [String].Empty
        Dim strYdata As String = [String].Empty


        'X軸年份
        For i As Integer = 0 To TempDt.Rows.Count - 1
            If i = TempDt.Rows.Count - 1 Then
                strXdata &= TempDt.Rows(i).Item("月份")
            Else
                strXdata &= TempDt.Rows(i).Item("月份") & Chr(9)
            End If
        Next

        '為x軸項目名稱  

        Dim laySpace As ChartSpace = New ChartSpaceClass()
        '創建ChartSpace物件來放置圖表  
        Dim AddChart As ChChart = laySpace.Charts.Add(0)
        '在ChartSpace物件中添加圖表  
        Dim c As Object = laySpace.Constants
        AddChart.Type = ChartChartTypeEnum.chChartTypeLine
        '指定繪製圖表的類型。"折線圖"  
        AddChart.HasLegend = True
        '指定圖表是否需要圖例標注  
        AddChart.HasTitle = True
        '指定圖表是否顯示標題  
        AddChart.Title.Caption = DepName
        '為圖表添加標題  
        AddChart.Title.Font.Size = 12
        AddChart.Legend.Font.Size = 9
        AddChart.Legend.Position = ChartLegendPositionEnum.chLegendPositionTop
        AddChart.Legend.Border.Color = "black"
        'AddChart.BarWidth = 200;  
        'AddChart.GapDepth = 500;//Y1與Y2柱狀間之寬度  
        'AddChart.GapWidth = 400;//YX1與YX2柱狀間之寬度  
        AddChart.Border.DashStyle = ChartLineDashStyleEnum.chLineSolid
        'AddChart.Rotation = 0; //Y角度向度  
        'AddChart.Inclination = 0; //X角度向度  
        AddChart.Border.Color = "White"
        AddChart.PlotArea.Interior.Color = "Gainsboro"
        '"Khaki"  
        AddChart.PlotArea.Floor.Border.Color = "green"
        AddChart.GapWidth = 70
        '' X軸設定  
        AddChart.Axes(0).HasTitle = True
        AddChart.Axes(0).Title.Caption = "月份"
        '為x軸添加圖示說明  
        AddChart.Axes(0).Title.Font.Size = 11
        AddChart.Axes(0).MajorTickMarks = ChartTickMarkEnum.chTickMarkInside
        '' Y軸設定  
        AddChart.Axes(1).HasTitle = True
        '為y軸添加圖示說明  
        AddChart.Axes(1).Title.Font.Size = 10
        AddChart.Axes(1).Title.Caption = angeName
        AddChart.Axes(1).HasTitle = True
        AddChart.Axes(1).HasMajorGridlines = True
        AddChart.Axes(1).MajorGridlines.Line.Color = "White"
        AddChart.Axes(1).MajorUnit = 200
        AddChart.Axes(1).HasAutoMajorUnit = True
        'AddChart.Axes[1].Scaling.Maximum = 900  
        AddChart.Axes(1).MajorTickMarks = ChartTickMarkEnum.chTickMarkInside

        For i As Integer = 0 To TempDt.Columns.Count - 2
            strYdata = ""
            For j As Integer = 0 To TempDt.Rows.Count - 1
                If j = TempDt.Rows.Count - 1 Then
                    strYdata &= Double.Parse(Replace(TempDt.Rows(j).Item(i + 1), ",", ""))
                Else
                    strYdata &= Double.Parse(Replace(TempDt.Rows(j).Item(i + 1), ",", "")) & Chr(9)
                End If
            Next

            ''統計值圖形設定  
            AddChart.SeriesCollection.Add(i)

            '添加一個series系列  
            'AddChart.SeriesCollection(i).Type = ChartChartTypeEnum.chChartTypeLine
            AddChart.SeriesCollection(i).SetData(ChartDimensionsEnum.chDimSeriesNames, +CInt((ChartSpecialDataSourcesEnum.chDataLiteral)), TempDt.Columns(i + 1).ColumnName)
            '給定series系列的名字  
            AddChart.SeriesCollection(i).SetData(ChartDimensionsEnum.chDimCategories, +CInt((ChartSpecialDataSourcesEnum.chDataLiteral)), strXdata)
            '給定分類  
            AddChart.SeriesCollection(i).SetData(ChartDimensionsEnum.chDimValues, CInt((OWC11.ChartSpecialDataSourcesEnum.chDataLiteral)), strYdata)
            '給定值  
            AddChart.SeriesCollection(i).Interior.Color = "LightSeaGreen"
            AddChart.SeriesCollection(i).DataLabelsCollection.Add()

        Next


        Dim strAbsolutePath As String = Application.StartupPath & "\ShowReportData.gif"
        '輸出檔.  
        laySpace.ExportPicture(strAbsolutePath, "GIF", 1024, 600)
        Dim strRelativePath As String = "./ShowReportData.gif"
        '創建GIF檔的相對路徑.  

        Dim strImageTag As String = "<IMG SRC='" + strRelativePath + "'/>"
        '把圖片添加到placeholder中,並在頁面上顯示  

        laySpace.ExportPicture(Application.StartupPath + "/ShowReportData.jpg", "jpg", 422, 384)

        Me.PicReport.ImageLocation = Application.StartupPath + "/ShowReportData.jpg"

    End Sub

 

''' <summary>
    ''' 直方圖
    ''' </summary>
    ''' <param name="TempDt"></param>
    ''' <param name="DepName"></param>
    ''' <param name="angeName"></param>
    ''' <remarks></remarks>
    Sub GetGDPChartLong(ByVal TempDt As Data.DataTable, ByVal DepName As String, ByVal angeName As String)

        Dim strXdata As String = [String].Empty
        Dim strYdata As String = [String].Empty
        'Dim strZdata As String = [String].Empty
        'Dim strWdata As String = [String].Empty

        'X軸年份
        For i As Integer = 0 To TempDt.Rows.Count - 1
            If i = TempDt.Rows.Count - 1 Then
                strXdata &= TempDt.Rows(i).Item("月份")
            Else
                strXdata &= TempDt.Rows(i).Item("月份") & Chr(9)
            End If
        Next

        '為x軸項目名稱  
        Dim laySpace As ChartSpace = New ChartSpaceClass()
        '創建ChartSpace物件來放置圖表  
        Dim AddChart As ChChart = laySpace.Charts.Add(0)
        '在ChartSpace物件中添加圖表  
        Dim c As Object = laySpace.Constants
        AddChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered
        '指定繪製圖表的類型。"直方圖"  
        AddChart.HasLegend = True
        '指定圖表是否需要圖例標注  
        AddChart.HasTitle = True
        '指定圖表是否顯示標題  
        AddChart.Title.Caption = DepName
        '為圖表添加標題  
        AddChart.Title.Font.Size = 12
        AddChart.Legend.Font.Size = 9
        AddChart.Legend.Position = ChartLegendPositionEnum.chLegendPositionTop
        AddChart.Legend.Border.Color = "black"
        AddChart.BarWidth = 200
        AddChart.GapDepth = 500 'Y1與Y2柱狀間之寬度  
        AddChart.GapWidth = 400 'YX1與YX2柱狀間之寬度  
        AddChart.Border.DashStyle = ChartLineDashStyleEnum.chLineSolid
        AddChart.Rotation = 0 '; //Y角度向度  
        AddChart.Inclination = 0 '; //X角度向度  
        AddChart.Border.Color = "White"
        AddChart.PlotArea.Interior.Color = "Gainsboro"
        '"Khaki"  
        AddChart.PlotArea.Floor.Border.Color = "green"
        AddChart.GapWidth = 70
        '' X軸設定  
        AddChart.Axes(0).HasTitle = True
        AddChart.Axes(0).Title.Caption = "月份"
        '為x軸添加圖示說明  
        AddChart.Axes(0).Title.Font.Size = 11
        AddChart.Axes(0).MajorTickMarks = ChartTickMarkEnum.chTickMarkInside
        '' Y軸設定  
        AddChart.Axes(1).HasTitle = True
        '為y軸添加圖示說明  
        AddChart.Axes(1).Title.Font.Size = 10
        AddChart.Axes(1).Title.Caption = angeName
        AddChart.Axes(1).HasTitle = True
        AddChart.Axes(1).HasMajorGridlines = True
        AddChart.Axes(1).MajorGridlines.Line.Color = "White"
        AddChart.Axes(1).MajorUnit = 200
        AddChart.Axes(1).HasAutoMajorUnit = True
        'AddChart.Axes[1].Scaling.Maximum = 900  
        AddChart.Axes(1).MajorTickMarks = ChartTickMarkEnum.chTickMarkInside


        For i As Integer = 0 To TempDt.Columns.Count - 2
            strYdata = ""

            For j As Integer = 0 To TempDt.Rows.Count - 1
                If j = TempDt.Rows.Count - 1 Then

                    strYdata &= Double.Parse(Replace(TempDt.Rows(j).Item(i + 1), ",", ""))
                Else
                    strYdata &= Double.Parse(Replace(TempDt.Rows(j).Item(i + 1), ",", "")) & Chr(9)
                End If
            Next


            ''統計值圖形設定  
            AddChart.SeriesCollection.Add(i)

            '添加一個series系列  
            'AddChart.SeriesCollection(i).Type = ChartChartTypeEnum.chChartTypeLine
            AddChart.SeriesCollection(i).SetData(ChartDimensionsEnum.chDimSeriesNames, +CInt((ChartSpecialDataSourcesEnum.chDataLiteral)), TempDt.Columns(i + 1).ColumnName)
            '給定series系列的名字  
            AddChart.SeriesCollection(i).SetData(ChartDimensionsEnum.chDimCategories, +CInt((ChartSpecialDataSourcesEnum.chDataLiteral)), strXdata)
            '給定分類  
            AddChart.SeriesCollection(i).SetData(ChartDimensionsEnum.chDimValues, CInt((OWC11.ChartSpecialDataSourcesEnum.chDataLiteral)), strYdata)
            '給定值  
            'AddChart.SeriesCollection(i).Interior.Color = '"LightSeaGreen"
            AddChart.SeriesCollection(i).DataLabelsCollection.Add()

        Next

        Dim strAbsolutePath As String = Application.StartupPath & "\ShowReportData.gif"
        '輸出檔.  
        laySpace.ExportPicture(strAbsolutePath, "GIF", 1024, 600)
        Dim strRelativePath As String = "./ShowReportData.gif"
        '創建GIF檔的相對路徑.  

        Dim strImageTag As String = "<IMG SRC='" + strRelativePath + "'/>"
        '把圖片添加到placeholder中,並在頁面上顯示  

        laySpace.ExportPicture(Application.StartupPath + "/ShowReportData.jpg", "jpg", 422, 384)

        Me.PicReport.ImageLocation = Application.StartupPath + "/ShowReportData.jpg"

    End Sub

ASP.NET也適用