【VB】利用OWC11繪製長條圖

1.首先要引入
Imports OWC11
Imports MSComctlLib

2.接著 放一個 PictureBox 在頁面上

3.傳入DataTable格式
本範例--統計1~12月消費總計
欄位有月份及總計
dt:

月份總計
177
2153
3100
495

 以下省略

4.呼叫
GetGDPChartLong(dt, "支出", "金額")
表格內容--> dt
圖標題  --> "支出"
Y軸標題 --> "金額"


長條圖---副程式:
#Region "長條圖"
    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 = 10
        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"
        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 = 100
        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", 323, 230)

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

    End Sub
#End Region

執行畫面:











延伸:(Microsoft Chart Controls圖表新利器)
http://demo.tc/Post/386
這個本人比較推薦

PS: 以上ASP.NET及VB.NET都適用

留言

這個網誌中的熱門文章

【ASP】日期轉換(西元<-->民國)

【VB】使用NPOI元件來匯出Excel--DataTableToExcel

【SQL】符號切割字串變成多欄