OWC 組件安裝
- 全名:Office Web Components
- 含 SpreadSheet、Chart、PivotTable、Data Source 組件
- Office 2003 安裝路徑:
C:\Program Files\MSECache\owc11_12\OWC11.msi
專案設定
- 加入參考:COM → Microsoft Office Web Components 11.0
- 產生
Interop.OWC10.dll(注意版本號差異)
- 引用命名空間:
using Microsoft.Office.Interop.Owc11;
完整圖表產生程式碼
private void MakeLineChart() {
// 資料準備
string[] DataName = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
int[] Data = { 0, 10, 20, 100, 40, 50, 60 };
int[] Data1 = { 100, 50, 41, 86 };
int[] Data2 = { 10, 50, 100, 30, 50, 60 };
// 格式化為 OWC 需要的 Tab 分隔字串
string strCategory = string.Join("\t", DataName) + "\t";
string strValue = string.Join("\t", Data.Select(x => x.ToString())) + "\t";
string strValue1 = string.Join("\t", Data1.Select(x => x.ToString())) + "\t";
string strValue2 = string.Join("\t", Data2.Select(x => x.ToString())) + "\t";
// 建立圖表空間與圖表
OWC10.ChartSpaceClass mySpace = new OWC10.ChartSpaceClass();
OWC10.ChChart myChart = mySpace.Charts.Add(0);
myChart.Type = OWC10.ChartChartTypeEnum.chChartTypeColumnClustered; // 長條圖
myChart.HasLegend = true;
myChart.HasTitle = true;
myChart.Title.Caption = "交易曲線圖";
// 軸標題
myChart.Axes[0].HasTitle = true; myChart.Axes[0].Title.Caption = "數量";
myChart.Axes[1].HasTitle = true; myChart.Axes[1].Title.Caption = "日期";
// 第一組資料
myChart.SeriesCollection.Add(0);
myChart.SeriesCollection[0].SetData(OWC10.ChartDimensionsEnum.chDimSeriesNames,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, "購買");
myChart.SeriesCollection[0].SetData(OWC10.ChartDimensionsEnum.chDimCategories,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);
myChart.SeriesCollection[0].SetData(OWC10.ChartDimensionsEnum.chDimValues,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);
// 第二組資料
myChart.SeriesCollection.Add(1);
myChart.SeriesCollection[1].SetData(OWC10.ChartDimensionsEnum.chDimSeriesNames,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, "出售");
myChart.SeriesCollection[1].SetData(OWC10.ChartDimensionsEnum.chDimCategories,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);
myChart.SeriesCollection[1].SetData(OWC10.ChartDimensionsEnum.chDimValues,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, strValue1);
// 第三組資料
myChart.SeriesCollection.Add(2);
myChart.SeriesCollection[2].SetData(OWC10.ChartDimensionsEnum.chDimSeriesNames,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, "總成交");
myChart.SeriesCollection[2].SetData(OWC10.ChartDimensionsEnum.chDimCategories,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);
myChart.SeriesCollection[2].SetData(OWC10.ChartDimensionsEnum.chDimValues,
(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, strValue2);
// 匯出 GIF 圖檔
string strAbsolutePath = Server.MapPath(".") + @"\Images\tempChart.gif";
mySpace.ExportPicture(strAbsolutePath, "GIF", 300, 300);
Image1.ImageUrl = "Images/tempChart.gif";
}
圖表類型枚舉對照表
| 枚舉值 | 中文名稱 |
| chChartTypeColumnClustered | 垂直柱狀統計圖 |
| chChartTypeColumn3D | 3D 垂直柱狀統計圖 |
| chChartTypeBarClustered | 水平柱狀統計圖 |
| chChartTypeBar3D | 3D 水平柱狀統計圖 |
| chChartTypeArea | 區域統計圖 |
| chChartTypeArea3D | 3D 區域統計圖 |
| chChartTypeDoughnut | 中空餅圖 |
| chChartTypeLineStacked | 折線統計圖 |
| chChartTypeLine3D | 3D 折線統計圖 |
| chChartTypeLineMarkers | 折線帶點統計圖 |
| chChartTypePie | 餅圖 |
| chChartTypePie3D | 3D 餅圖 |
| chChartTypeRadarSmoothLine | 網狀統計圖 |
| chChartTypeSmoothLine | 弧線統計圖 |