2008/03/14

使用OWC11 畫出統計圖表

出處

先在設計畫面的工具列新增三個項目(三個都在COM元件內).

Microsoft Office Chart 11.0
Microsoft Office PivotTable 11.0
Microsoft Office Spreadsheet 11.0

之後拉一個Microsoft Office Chart 11.0到Form上.
一個Timer
3個RadioButton.
rdb_chChartTypeLine
rdb_chChartTypeLine3D
rdb_chChartTypeLineMarkers

以下即為程式碼原始碼.

using Microsoft.Office.Interop.Owc11;
ChartChartTypeEnum _Type;
private void Form1_Load(object sender, EventArgs e)
{
    showChart(ChartChartTypeEnum.chChartTypeLine);
}

private void showChart(ChartChartTypeEnum Type)
{
    try
    {
        axChartSpace1.Clear();
        ChChart objChart = axChartSpace1.Charts.Add(0);

        objChart.Type = Type;
        objChart.HasLegend = true;
        objChart.HasTitle = true;
        objChart.Title.Caption = "數量統計";
        objChart.Axes[0].HasTitle = true;
        objChart.Axes[0].Title.Caption = "月份";
        objChart.Axes[1].HasTitle = true;
        objChart.Axes[1].Title.Caption = "個";

        objChart.SeriesCollection.Add(0);
        objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "3C");

        objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral,
        "Jan" + '\t' + "Feb" + '\t' + "Mar" + '\t' + "Apr" + '\t' + "May" + '\t' + "Jun" + '\t');
        Random r = new Random(DateTime.Now.Second);
        string w1 = r.Next(300).ToString();
        string w2 = r.Next(300).ToString();
        string w3 = r.Next(300).ToString();
        string w4 = r.Next(300).ToString();
        string w5 = r.Next(300).ToString();
        string w6 = r.Next(300).ToString();
        objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues,
        (int)ChartSpecialDataSourcesEnum.chDataLiteral,
        w1 + '\t' + w2 + '\t' + w3 + '\t' + w4 + '\t' + w5 + '\t' + w6 + '\t');

        objChart.SeriesCollection.Add(1);
        objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimSeriesNames,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "Daily Needs");

        objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimCategories,
        +(int)ChartSpecialDataSourcesEnum.chDataLiteral,
        "Jan" + '\t' + "Feb" + '\t' + "Mar" + '\t' + "Apr" + '\t' + "May" + '\t' + "Jun" + '\t');
        string b1 = r.Next(300).ToString();
        string b2 = r.Next(300).ToString();
        string b3 = r.Next(300).ToString();
        string b4 = r.Next(300).ToString();
        string b5 = r.Next(300).ToString();
        string b6 = r.Next(300).ToString();

        objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimValues,
        (int)ChartSpecialDataSourcesEnum.chDataLiteral,
        b1 + '\t' + b2 + '\t' + b3 + '\t' + b4 + '\t' + b5 + '\t' + b6 + '\t');
    }
    catch (Exception ex)
    {
        timer1.Enabled = false;
        MessageBox.Show(ex.Message);
    }
    finally
    {
        _Type = Type;
    }
}

private void rdb_chChartTypeLine_CheckedChanged(object sender, EventArgs e)
{
    if (rdb_chChartTypeLine.Checked)
    {
        showChart(ChartChartTypeEnum.chChartTypeLine);
        return;
    }
    if (rdb_chChartTypeLine3D.Checked)
    {
        showChart(ChartChartTypeEnum.chChartTypeLine3D);
        return;
    }
    if (rdb_chChartTypeLineMarkers.Checked)
    {
        showChart(ChartChartTypeEnum.chChartTypeLineMarkers);
        return;
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    showChart(_Type);
}

沒有留言: