using System; using System.Data; using System.Text; using System.Drawing;
namespace doHope.OWCC { /// <summary> /// 封裝OWC做統計圖 /// by cherish58 /// </summary> public class OWCChart { #region 屬性
private string _phaysicalimagepath; private string _title; private string _seriesname; private int _picwidth; private int _pichight; private DataTable _datasource; private string _strdatasource; private string strCategory; private string strValue;
/// <summary> /// 圖片存放路徑 /// </summary> public string PhaysicalImagePath { set { _phaysicalimagepath = value; } get { return _phaysicalimagepath; } }
public string Title { set { _title = value; } get { return _title; } }
public string SeriesName { set { _seriesname = value; } get { return _seriesname; } }
public int PicWidth { set { _picwidth = value; } get { return _picwidth; } }
public int PicHight { set { _pichight = value; } get { return _pichight; } }
/// <summary> /// 傳DataTable類型 /// </summary> public DataTable DataSource { set { _datasource = value; strCategory = GetColumnsStr(_datasource); strValue = GetValueStr(_datasource); } get { return _datasource; } }
/// <summary> /// 傳字符串,分隔用分號(;) /// </summary> public string strDataSource { set { _strdatasource = value; strCategory = GetColumnsStr(_strdatasource); strValue = GetValueStr(_strdatasource); } get { return _strdatasource; } }
private string GetColumnsStr(DataTable dt) { StringBuilder strList = new StringBuilder(); foreach (DataRow r in dt.Rows) { strList.Append(r[0].ToString() + '/t'); } return strList.ToString(); }
private string GetColumnsStr(string coldt) { return coldt == "" ? "" : coldt.Substring(0, coldt.IndexOf(";")); }
private string GetValueStr(DataTable dt) { StringBuilder strList = new StringBuilder(); foreach (DataRow r in dt.Rows) { strList.Append(r[1].ToString() + '/t'); } return strList.ToString(); }
private string GetValueStr(string rowdt) { return rowdt == "" ? "" : rowdt.Substring(rowdt.LastIndexOf(";") + 1); }
#endregion #region 構造函數
/// <summary> /// 0 /// </summary> public OWCChart() { // }
/// <summary> /// 1 /// </summary> /// <param name="PhaysicalImagePath"></param> /// <param name="Title"></param> /// <param name="SeriesName"></param> /// <param name="PicWidth"></param> /// <param name="PicHight"></param> public OWCChart(string PhaysicalImagePath, string Title, string SeriesName, int PicWidth, int PicHight) { _phaysicalimagepath = PhaysicalImagePath; _title = Title; _seriesname = SeriesName; _pichight = PicHight; _picwidth = PicWidth; }
/// <summary> /// 2 /// </summary> /// <param name="Title"></param> /// <param name="SeriesName"></param> /// <param name="PicWidth"></param> /// <param name="PicHight"></param> public OWCChart(string Title, string SeriesName, int PicWidth, int PicHight) { _title = Title; _seriesname = SeriesName; _pichight = PicHight; _picwidth = PicWidth; }
#endregion #region 柱形圖
/// <summary> /// 柱形圖 /// </summary> /// <param name="Xname">X軸描述</param> /// <param name="Yname">Y軸描述</param> /// <param name="IfExportToFile">若把圖像輸出到文件夾則爲true,否則爲false</param> /// <returns>若把圖像輸出到文件夾返回生成的圖像名稱,否則返回Bitmap類型</returns> public Object CreateColumn(string Xname, string Yname, bool IfExportToFile, bool If3D) { OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass();//創建ChartSpace對象來放置圖表 OWC11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace對象中添加圖表,Add方法返回chart對象
//指定圖表的類型。類型由OWC11.ChartChartTypeEnum枚舉值得到 if (If3D == true) objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered3D; else objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered;
//指定圖表是否需要圖例 objChart.HasLegend = true;
//標題 objChart.HasTitle = true; objChart.Title.Caption = _title; objChart.Title.Font.Bold = true; // objChart.Title.Font.Color="blue"; #region 樣式設置
//旋轉 // objChart.Rotation = 145;//表示指定三維圖表的旋轉角度 // objChart.Inclination = 10;//表示指定三維圖表的視圖斜率。有效範圍爲 -90 到 90 // // //背景顏色 // objChart.PlotArea.Interior.Color = "red"; // // //底座顏色 // objChart.PlotArea.Floor.Interior.Color = "green"; // objChart.Overlap = 50;//單個類別中標誌之間的重疊量
#endregion
//x,y軸的圖示說明 objChart.Axes[0].HasTitle = true; objChart.Axes[0].Title.Caption = "X : " + Xname + ""; objChart.Axes[1].HasTitle = true; objChart.Axes[1].Title.Caption = "Y : " + Yname + "";
//添加一個series OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
//給定series的名字 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName); //給定分類 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory); //給定值 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);
OWC11.ChDataLabels dl = objChart.SeriesCollection[0].DataLabelsCollection.Add(); dl.HasValue = true; // dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
// string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
if (IfExportToFile == true) { string filename = "temp.gif"; string strAbsolutePath = _phaysicalimagepath + "//" + filename; objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //輸出成GIF文件.
return filename; } else { string tmp = "Tmp"; objCSpace.ExportPicture(tmp, "GIF", _picwidth, _pichight); Bitmap bm = new Bitmap(tmp, true);
return bm; } }
#endregion #region 線性圖
/// <summary> /// 線性圖 /// </summary> /// <param name="Xname">X軸描述</param> /// <param name="Yname">Y軸描述</param> /// <param name="IfExportToFile">若把圖像輸出到文件夾則爲true,否則爲false</param> /// <returns>若把圖像輸出到文件夾返回生成的圖像名稱,否則返回Bitmap類型</returns> public Object CreateLine(string Xname, string Yname, bool IfExportToFile, bool If3D) { OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass();//創建ChartSpace對象來放置圖表 OWC11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace對象中添加圖表,Add方法返回chart對象
//指定圖表的類型。類型由OWC11.ChartChartTypeEnum枚舉值得到 if (If3D == true) objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeLine3D; else objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeLine;
//指定圖表是否需要圖例 objChart.HasLegend = true;
//標題 objChart.HasTitle = true; objChart.Title.Caption = _title; objChart.Title.Font.Bold = true; // objChart.Title.Font.Color="blue"; #region 樣式設置
//旋轉 // objChart.Rotation = 145;//表示指定三維圖表的旋轉角度 // objChart.Inclination = 10;//表示指定三維圖表的視圖斜率。有效範圍爲 -90 到 90 // // //背景顏色 // objChart.PlotArea.Interior.Color = "red"; // // //底座顏色 // objChart.PlotArea.Floor.Interior.Color = "green"; // objChart.Overlap = 50;//單個類別中標誌之間的重疊量
#endregion
//x,y軸的圖示說明 objChart.Axes[0].HasTitle = true; objChart.Axes[0].Title.Caption = "X : " + Xname + ""; objChart.Axes[1].HasTitle = true; objChart.Axes[1].Title.Caption = "Y : " + Yname + "";
//添加一個series OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
//給定series的名字 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName); //給定分類 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory); //給定值 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);
OWC11.ChDataLabels dl = objChart.SeriesCollection[0].DataLabelsCollection.Add(); dl.HasValue = true; // dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
// string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
if (IfExportToFile == true) { string filename = "temp.gif"; string strAbsolutePath = _phaysicalimagepath + "//" + filename; objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //輸出成GIF文件.
return filename; } else { string tmp = "Tmp"; objCSpace.ExportPicture(tmp, "GIF", _picwidth, _pichight); Bitmap bm = new Bitmap(tmp, true);
return bm; } }
#endregion #region 條形圖(橫向)
/// <summary> /// 條形圖(橫向) /// </summary> /// <param name="Xname"></param> /// <param name="Yname"></param> /// <param name="IfExportToFile"></param> /// <returns></returns> public Object CreateBar(string Xname, string Yname, bool IfExportToFile, bool If3D) { OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass();//創建ChartSpace對象來放置圖表 OWC11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace對象中添加圖表,Add方法返回chart對象
//指定圖表的類型。類型由OWC.ChartChartTypeEnum枚舉值得到 if (If3D == true) objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeBarClustered3D; else objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeBarClustered;
//指定圖表是否需要圖例 objChart.HasLegend = true;
//標題 objChart.HasTitle = true; objChart.Title.Caption = _title; objChart.Title.Font.Bold = true; // objChart.Title.Font.Color="blue"; #region 樣式設置
//旋轉 // objChart.Rotation = 145;//表示指定三維圖表的旋轉角度 // objChart.Inclination = 10;//表示指定三維圖表的視圖斜率。有效範圍爲 -90 到 90
//背景顏色 // objChart.PlotArea.Interior.Color = "red";
//底座顏色 // objChart.PlotArea.Floor.Interior.Color = "green"; // objChart.Overlap = 50;//單個類別中標誌之間的重疊量
#endregion
//x,y軸的圖示說明 objChart.Axes[0].HasTitle = true; objChart.Axes[0].Title.Caption = "X : " + Xname + ""; objChart.Axes[1].HasTitle = true; objChart.Axes[1].Title.Caption = "Y : " + Yname + "";
//添加一個series OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
//給定series的名字 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName); //給定分類 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory); //給定值 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);
OWC11.ChDataLabels dl = objChart.SeriesCollection[0].DataLabelsCollection.Add(); dl.HasValue = true; // dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
// string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
if (IfExportToFile == true) { string filename = "temp.gif"; string strAbsolutePath = _phaysicalimagepath + "//" + filename; objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //輸出成GIF文件.
return filename; } else { string tmp = "Tmp"; objCSpace.ExportPicture(tmp, "GIF", _picwidth, _pichight); Bitmap bm = new Bitmap(tmp, true);
return bm; } }
#endregion #region 餅圖
/// <summary> /// 餅圖 /// </summary> /// <param name="IfExportToFile"></param> /// <returns></returns> public Object CreatePie(bool IfExportToFile, bool If3D) { OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass();//創建ChartSpace對象來放置圖表 OWC11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace對象中添加圖表,Add方法返回chart對象
//指定圖表的類型 if (If3D == true) objChart.Type = OWC11.ChartChartTypeEnum.chChartTypePie3D; else objChart.Type = OWC11.ChartChartTypeEnum.chChartTypePie;
//指定圖表是否需要圖例 objChart.HasLegend = true;
//標題 objChart.HasTitle = true; objChart.Title.Caption = _title; objChart.Title.Font.Bold = true;
//添加一個series OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
//給定series的名字 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName); //給定分類 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory); //給定值 ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);
//表示系列或趨勢線上的單個數據標誌 OWC11.ChDataLabels dl = objChart.SeriesCollection[0].DataLabelsCollection.Add(); dl.HasValue = true; dl.HasPercentage = true; //圖表繪圖區的圖例放置在右側。 // dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionRight;
// string filename=DateTime.Now.Ticks.ToString()+".gif";
if (IfExportToFile == true) { string filename = "temp.gif"; string strAbsolutePath = _phaysicalimagepath + "//" + filename; objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //輸出成GIF文件.
return filename; } else { string tmp = "Tmp"; objCSpace.ExportPicture(tmp, "GIF", _picwidth, _pichight); Bitmap bm = new Bitmap(tmp, true);
return bm; } }
#endregion } }