2008-05-01

使用OWC產生統計圖表

1.          建立一個SimpleChart.aspx
2.          加入Microsoft Office Web Components參考
3.          撰寫程式碼
SimpleChart.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SimpleChart.aspx.cs"Inherits="_Default" %>
<head runat="server">
    <title>未命名頁面</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Image ID="Image" runat="server" /></div>
    </form>
</body>
</html>

SimpleChart.aspx.cs
using System;
using Microsoft.Office.Interop.Owc11;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ChartSpace 圖表集合 = new ChartSpace();
        ChChart 圖表 = 圖表集合.Charts.Add(0);
       
        圖表.HasTitle = true;
        圖表.Title.Caption = "OWC測試";
   
        圖表.Axes[0].HasTitle = true;
        圖表.Axes[0].Title.Caption = "類";
        圖表.Axes[1].HasTitle = true;
        圖表.Axes[1].Title.Caption = "值";
    char Tab = Convert.ToChar(9);
        string 類 = "A" + Tab + "B" + Tab + "C" + Tab + "D";
        string 值 = "90" + Tab + "100" + Tab + "50" + Tab + "70";
        圖表.SeriesCollection.Add(0);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 類);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 值);
        圖表集合.ExportPicture(MapPath("Temp.jpg"), "Gif", 400, 400);
        this.Image.ImageUrl = "Temp.jpg";
    }
}
這樣就完成了,下圖是執行的結果
  現在來做程式碼的解說,SimpleChart.aspx的部分很簡單,所以就不多作說明,這一個範示只作SimpleChart.aspx.cs的說明,程式碼的變數都是用中文,相信對你在了解他是什麼用途應該會比較容易。
    
    ChartSpace圖表集合 = new ChartSpace();
        ChChart 圖表 = 圖表集合.Charts.Add(0)
ChartSpaceMicrosoft.Office.Interop.Owc11名稱空間下的類別,他是OWC最根部的類別之一,你可以想像他是一個畫版,可以畫很多個圖,ChChart代表畫版中的圖。
這是使用三個圖的畫版範例。
    圖表.HasTitle = true;
        圖表.Title.Caption = "OWC測試";
   
        圖表.Axes[0].HasTitle = true;
        圖表.Axes[0].Title.Caption = "類";
        圖表.Axes[1].HasTitle = true;
        圖表.Axes[1].Title.Caption = "值";
這個部分應該是很容易了解,HasTitle表示要不要顯示標題,Title.Caption表示標題的文字是什麼,也有Font字型等屬性可以調整,Axes代表圖表的軸,設定軸要不要顯示標題,每一個圖表的軸線都不盡相同,直條圖多半都是二個軸,也有二軸以上的圖表,也有零個軸如圖餅圖,這個地方是最容易發生程式的意外(Exception),在設計的時候別忘了檢查要圖表的類型是幾個軸的,或多或少都會產生意外喔。
    char Tab = Convert.ToChar(9);
        string 類 = "A" + Tab + "B" + Tab + "C" + Tab + "D";
        string 值 = "90" + Tab + "100" + Tab + "50" + Tab + "70";
        圖表.SeriesCollection.Add(0);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 類);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 值);
Convert.ToChar(9)代表了Tab鍵的字元,VB.NET的話是使用Chr(9),數據是由Tab鍵分隔,SeriesCollection代表的圖表的數據集合,像線性圖是可以有好幾個數據,使用SetData方法設定數據,有三個參數,第一個是數據類型,第二個是數據來源的類型,第三個這邊的話就是數據啦,類型都有列在下方,可自行參考。
ChartDimensionsEnum 可為這些 ChartDimensionsEnum 常數之一。
chDimBubbleValues
設定「泡泡」圖上的標記值。
chDimCategories
設定要作為類別的值。
chDimCharts
會在 HasMultipleCharts 屬性設為 True時,設定新圖表的來源欄位。
chDimCloseValues
設定「股票」圖的收盤價。
chDimFilter
設定要放置在篩選軸上的欄位。
chDimFormatValues
設定要在格式圖中使用的值。
chDimHighValues
設定「股票」圖的最高價。
chDimLowValues
設定「股票」圖的最低價。
chDimOpenValues
設定「股票」圖的開盤價。
chDimRValues
設定「極座標」圖的 R 值。
chDimSeriesNames
設定要作為數列名稱的值。
chDimThetaValues
設定「極座標」圖的「樞紐角度」值。
chDimValues
設定製成圖表的值。
chDimXValues
設定 XY(散佈圖)或「泡泡」圖的 x 值。
chDimYValues
設定 XY(散佈圖)或「泡泡」圖的 y 值。
ChartSpecialDataSourcesEnum 可以是這些ChartSpecialDataSourcesEnum 常數之一。
chDataBound
將指定的物件連結到 DataReference 引數中所指定的外部資料來源。 
chDataLinked
將指定的物件連結到另一個維度。當您在Dimension 引數中指定 chDimFormatValues來建立格式圖時,請使用這個值。
chDataLiteral
將指定的物件連結到 DataReference 引數中所指定的文字資料。 
chDataNone
清除指定的物件。
        圖表集合.ExportPicture(MapPath("Temp.jpg"), "Gif", 400, 400);
        this.Image.ImageUrl = "Temp.jpg";
現在圖表都以經設定好了,可以輸出了,輸出有二個方式:
l          ExportPicture 輸出檔案
l          GetPicture 輸出成Byte陣列
這邊使用ExportPictureExportPicture有四個參數如下表:
FileName    
選擇性的 String。檔名和路徑。
FilterName    
選擇性的 String。指定要使用的圖形副檔名的名稱。支援的副檔名名稱為 GIFJPG  PNG。預設值為 GIF
Width     
選擇性的 Long 整數。指定圖形寬度(像素)。
Height     
選擇性的 Long 整數。指定圖形高度(像素)。
在將輸出的檔案路徑,給圖型控制項就大功告成了!!,不過到這邊只能算暸解OWC的一小部分而以,他還有很多功能,值得你去摸索,下列再列出一些OWC方法,讓你的圖表更豐富。
      //圖表是否顯示圖例
      圖表.HasLegend = False 
      //輸出的圖型類型,如下方列表
      圖表.Type = ChartChartTypeEnum.chChartTypeColumnClustered;
      //圖表是否要顯示數據值,請加在圖表.SeriesCollection[0].SetData之後
      圖表.SeriesCollection(0).DataLabelsCollection.Add()
      圖表.SeriesCollection(0).DataLabelsCollection.Item(0).HasValue = True //是不是要顯示Value
      圖表.SeriesCollection(0).DataLabelsCollection.Item(0).Font.Size = 10 //字體大小
      圖表.SeriesCollection(0).DataLabelsCollection.Item(0).NumberFormat ="#,##0" //數字格式,這裡是加上千分位

沒有留言:

張貼留言