owc charting class
            随便写了一个charting的class ,用owc画的,总觉得owc画图不是很漂亮,不过还能对付看吧!现在画图的控件也很多,免费的不多,想自己开发一个吧,能力有限,也没那个时间,觉得owc还可以满足对质量不是要求很高的图的要求,主要是免费的,装了office就ok了。
下面还是给出代码:
 using System;
using System;
 using System.Data;
using System.Data;
 using System.Configuration;
using System.Configuration;
 using System.Web;
using System.Web;
 using System.Web.Security;
using System.Web.Security;
 using System.Web.UI;
using System.Web.UI;
 using System.Web.UI.WebControls;
using System.Web.UI.WebControls;
 using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls.WebParts;
 using System.Web.UI.HtmlControls;
using System.Web.UI.HtmlControls;
 using OWC = Microsoft.Office.Interop.Owc11;
using OWC = Microsoft.Office.Interop.Owc11;

 /// <summary>
/// <summary>
 /// DrawChar 的摘要说明
/// DrawChar 的摘要说明
 /// </summary>
/// </summary>
 public class DrawChart
public class DrawChart
 {
{
 private string[] m_strSeries = null;
    private string[] m_strSeries = null;
 private string m_strCategory = string.Empty;
    private string m_strCategory = string.Empty;
 private string[] m_strValues = null;
    private string[] m_strValues = null;
 private string m_strFileName = string.Empty;
    private string m_strFileName = string.Empty;
 private int m_nCount = 0;
    private int m_nCount = 0;
 private string m_strChartTitle = string.Empty;
    private string m_strChartTitle = string.Empty;
 string m_strAbsolutePath = string.Empty;
    string m_strAbsolutePath = string.Empty;
 string m_strPhysicalPath = string.Empty;
    string m_strPhysicalPath = string.Empty;
 OWC.ChartChartTypeEnum m_chartType;
    OWC.ChartChartTypeEnum m_chartType;

 /// <summary>
    /// <summary>
 ///
    /// 
 /// </summary>
    /// </summary>
 /// <param name="strSeries">做标注的时候用的名字</param>
    /// <param name="strSeries">做标注的时候用的名字</param>
 /// <param name="strCategory">横坐标上的值</param>
    /// <param name="strCategory">横坐标上的值</param>
 /// <param name="strValues">纵坐标上的值(可以是数组表示的,有多个曲线)</param>
    /// <param name="strValues">纵坐标上的值(可以是数组表示的,有多个曲线)</param>
 /// <param name="charTitle">图的名</param>
    /// <param name="charTitle">图的名</param>
 /// <param name="AbsolutePath">Server.MapPath = D:\My Study\c#\web\DssWeb\Report\</param>
    /// <param name="AbsolutePath">Server.MapPath = D:\My Study\c#\web\DssWeb\Report\</param>
 /// <param name="PhysicalPath">Request.PhysicalApplicationPath = http://10.12.1.55/dssweb/Report/</param>
    /// <param name="PhysicalPath">Request.PhysicalApplicationPath = http://10.12.1.55/dssweb/Report/</param>
 /// <param name="fileName">图片名</param>
    /// <param name="fileName">图片名</param>
 /// <param name="Count">所画线的个数</param>
    /// <param name="Count">所画线的个数</param>
 /// <param name="chartType">图类型</param>
    /// <param name="chartType">图类型</param>
 public DrawChart(string[] strSeries, string strCategory, string[] strValues, string charTitle,
    public DrawChart(string[] strSeries, string strCategory, string[] strValues, string charTitle,
 string AbsolutePath,string PhysicalPath, string fileName, int Count, OWC.ChartChartTypeEnum chartType)
        string AbsolutePath,string PhysicalPath, string fileName, int Count, OWC.ChartChartTypeEnum chartType)
 {
    {
 m_strSeries = strSeries;
        m_strSeries = strSeries;
 m_strCategory = strCategory;
        m_strCategory = strCategory;
 m_strValues = strValues;
        m_strValues = strValues;
 m_strFileName = fileName;
        m_strFileName = fileName;
 m_strChartTitle = charTitle;
        m_strChartTitle = charTitle;
 m_nCount = Count;
        m_nCount = Count;
 m_chartType = chartType;
        m_chartType = chartType;
 m_strAbsolutePath = AbsolutePath;
        m_strAbsolutePath = AbsolutePath;
 m_strPhysicalPath = PhysicalPath;
        m_strPhysicalPath = PhysicalPath;
 }
    }
 public string Draw()
    public string Draw()
 {
    {
 try
        try
 {
        {
 int GifWidth = 762;
            int GifWidth = 762;
 int GifHeight = 240;
            int GifHeight = 240;
 string ImgWidth = "762px";
            string ImgWidth = "762px";
 
           
 OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();
            OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();

 //在ChartSpace对象中添加图表,Add方法返回chart对象
            //在ChartSpace对象中添加图表,Add方法返回chart对象
 OWC.ChChart objChart = objCSpace.Charts.Add(0);
            OWC.ChChart objChart = objCSpace.Charts.Add(0);

 //指定图表是否需要图例
            //指定图表是否需要图例
 objChart.HasLegend = true;
            objChart.HasLegend = true;
 objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionBottom;
            objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionBottom;
 objChart.Type = m_chartType;
            objChart.Type = m_chartType;

 if (m_chartType == OWC.ChartChartTypeEnum.chChartTypePie3D)
            if (m_chartType == OWC.ChartChartTypeEnum.chChartTypePie3D)
 {
            {
 GifWidth = 254;
                GifWidth = 254;
 GifHeight = 280;
                GifHeight = 280;
 ImgWidth = "254px";
                ImgWidth = "254px";
 objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionRight;
                objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionRight;
 }
            }
 if (m_chartType == OWC.ChartChartTypeEnum.chChartTypeColumnClustered)
            if (m_chartType == OWC.ChartChartTypeEnum.chChartTypeColumnClustered)
 {
            {
 GifWidth = 506;
                GifWidth = 506;
 GifHeight = 280;
                GifHeight = 280;
 ImgWidth = "506px";
                ImgWidth = "506px";
 }
            }

 //图形标题
            //图形标题
 objChart.HasTitle = true;
            objChart.HasTitle = true;
 objChart.Title.Caption = m_strChartTitle;
            objChart.Title.Caption = m_strChartTitle;
 objChart.Title.Font.Size = 10;
            objChart.Title.Font.Size = 10;

 for (int i = 0; i < m_nCount; i++)
            for (int i = 0; i < m_nCount; i++)
 {
            {
 string strValue = m_strValues[i];
                string strValue = m_strValues[i];
 string strSeriesName = m_strSeries[i];
                string strSeriesName = m_strSeries[i];

 int iSer = i;
                int iSer = i;

 //添加一个series
                //添加一个series
 objChart.SeriesCollection.Add(iSer);
                objChart.SeriesCollection.Add(iSer);

 //给定series的名字
                //给定series的名字
 objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimSeriesNames,
                objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimSeriesNames,
 +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
                +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);

 //给定分类,横轴
                //给定分类,横轴
 objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimCategories,
                objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimCategories,
 +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, m_strCategory);
                    +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, m_strCategory);

 //给定各分类的数值,纵轴
                //给定各分类的数值,纵轴
 objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimValues,
                objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimValues,
 +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);
                    +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);

 objChart.SeriesCollection[iSer].Line.set_Weight(OWC.LineWeightEnum.owcLineWeightThick);
                objChart.SeriesCollection[iSer].Line.set_Weight(OWC.LineWeightEnum.owcLineWeightThick);
 }
            }

 // 背景色
            // 背景色
 objChart.PlotArea.Interior.Color = OWC.ChartColorIndexEnum.chColorNone;
            objChart.PlotArea.Interior.Color = OWC.ChartColorIndexEnum.chColorNone;

 objChart.Legend.Interior.SetTwoColorGradient(
            objChart.Legend.Interior.SetTwoColorGradient(
 Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
                Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
 Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
                 Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
 "LightGray", "White");
                 "LightGray", "White");
 objChart.Legend.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
            objChart.Legend.Border.Color = OWC.ChartColorIndexEnum.chColorNone;

 objCSpace.Interior.SetTwoColorGradient(
            objCSpace.Interior.SetTwoColorGradient(
 Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
                Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
 Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
                 Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
 "LightGray", "White");
                 "LightGray", "White");
 objCSpace.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
            objCSpace.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
 
            
 //输出成GIF文件.
            //输出成GIF文件.
 m_strFileName = m_strFileName + ".gif";
            m_strFileName = m_strFileName + ".gif";
 m_strAbsolutePath = m_strAbsolutePath + m_strFileName;
            m_strAbsolutePath = m_strAbsolutePath + m_strFileName;
 objCSpace.ExportPicture(m_strAbsolutePath, "GIF", GifWidth, GifHeight);
            objCSpace.ExportPicture(m_strAbsolutePath, "GIF", GifWidth, GifHeight);
 string strImageUrl = @"<img src='" + m_strPhysicalPath + m_strFileName + "' width='" + ImgWidth + "' />";
            string strImageUrl = @"<img src='" + m_strPhysicalPath + m_strFileName + "' width='" + ImgWidth + "' />";
 return strImageUrl;
            return strImageUrl;
 }
        }
 catch (Exception ex)
        catch (Exception ex)
 {
        {
 return ex.Message;
            return ex.Message;
 }
        }
 }
    }
 }
}
 
 DrawChart dc = new DrawChart(m_strSeries, m_strCategory, m_strValues, m_strChartTitle, m_strAbsolutePath,
DrawChart dc = new DrawChart(m_strSeries, m_strCategory, m_strValues, m_strChartTitle, m_strAbsolutePath,
 m_strPhysicalPath, m_strFileName, m_nCount, m_chartType);
                m_strPhysicalPath, m_strFileName, m_nCount, m_chartType);
 divChart.InnerHtml = dc.Draw();//divChart是在html页中随便一个div,当然runat=server了
            divChart.InnerHtml = dc.Draw();//divChart是在html页中随便一个div,当然runat=server了
下面还是给出代码:
 using System;
using System; using System.Data;
using System.Data; using System.Configuration;
using System.Configuration; using System.Web;
using System.Web; using System.Web.Security;
using System.Web.Security; using System.Web.UI;
using System.Web.UI; using System.Web.UI.WebControls;
using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;
using System.Web.UI.HtmlControls; using OWC = Microsoft.Office.Interop.Owc11;
using OWC = Microsoft.Office.Interop.Owc11;
 /// <summary>
/// <summary> /// DrawChar 的摘要说明
/// DrawChar 的摘要说明 /// </summary>
/// </summary> public class DrawChart
public class DrawChart {
{ private string[] m_strSeries = null;
    private string[] m_strSeries = null; private string m_strCategory = string.Empty;
    private string m_strCategory = string.Empty; private string[] m_strValues = null;
    private string[] m_strValues = null; private string m_strFileName = string.Empty;
    private string m_strFileName = string.Empty; private int m_nCount = 0;
    private int m_nCount = 0; private string m_strChartTitle = string.Empty;
    private string m_strChartTitle = string.Empty; string m_strAbsolutePath = string.Empty;
    string m_strAbsolutePath = string.Empty; string m_strPhysicalPath = string.Empty;
    string m_strPhysicalPath = string.Empty; OWC.ChartChartTypeEnum m_chartType;
    OWC.ChartChartTypeEnum m_chartType;
 /// <summary>
    /// <summary> ///
    ///  /// </summary>
    /// </summary> /// <param name="strSeries">做标注的时候用的名字</param>
    /// <param name="strSeries">做标注的时候用的名字</param> /// <param name="strCategory">横坐标上的值</param>
    /// <param name="strCategory">横坐标上的值</param> /// <param name="strValues">纵坐标上的值(可以是数组表示的,有多个曲线)</param>
    /// <param name="strValues">纵坐标上的值(可以是数组表示的,有多个曲线)</param> /// <param name="charTitle">图的名</param>
    /// <param name="charTitle">图的名</param> /// <param name="AbsolutePath">Server.MapPath = D:\My Study\c#\web\DssWeb\Report\</param>
    /// <param name="AbsolutePath">Server.MapPath = D:\My Study\c#\web\DssWeb\Report\</param> /// <param name="PhysicalPath">Request.PhysicalApplicationPath = http://10.12.1.55/dssweb/Report/</param>
    /// <param name="PhysicalPath">Request.PhysicalApplicationPath = http://10.12.1.55/dssweb/Report/</param> /// <param name="fileName">图片名</param>
    /// <param name="fileName">图片名</param> /// <param name="Count">所画线的个数</param>
    /// <param name="Count">所画线的个数</param> /// <param name="chartType">图类型</param>
    /// <param name="chartType">图类型</param> public DrawChart(string[] strSeries, string strCategory, string[] strValues, string charTitle,
    public DrawChart(string[] strSeries, string strCategory, string[] strValues, string charTitle, string AbsolutePath,string PhysicalPath, string fileName, int Count, OWC.ChartChartTypeEnum chartType)
        string AbsolutePath,string PhysicalPath, string fileName, int Count, OWC.ChartChartTypeEnum chartType) {
    { m_strSeries = strSeries;
        m_strSeries = strSeries; m_strCategory = strCategory;
        m_strCategory = strCategory; m_strValues = strValues;
        m_strValues = strValues; m_strFileName = fileName;
        m_strFileName = fileName; m_strChartTitle = charTitle;
        m_strChartTitle = charTitle; m_nCount = Count;
        m_nCount = Count; m_chartType = chartType;
        m_chartType = chartType; m_strAbsolutePath = AbsolutePath;
        m_strAbsolutePath = AbsolutePath; m_strPhysicalPath = PhysicalPath;
        m_strPhysicalPath = PhysicalPath; }
    } public string Draw()
    public string Draw() {
    { try
        try {
        { int GifWidth = 762;
            int GifWidth = 762; int GifHeight = 240;
            int GifHeight = 240; string ImgWidth = "762px";
            string ImgWidth = "762px"; 
            OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();
            OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();
 //在ChartSpace对象中添加图表,Add方法返回chart对象
            //在ChartSpace对象中添加图表,Add方法返回chart对象 OWC.ChChart objChart = objCSpace.Charts.Add(0);
            OWC.ChChart objChart = objCSpace.Charts.Add(0);
 //指定图表是否需要图例
            //指定图表是否需要图例 objChart.HasLegend = true;
            objChart.HasLegend = true; objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionBottom;
            objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionBottom; objChart.Type = m_chartType;
            objChart.Type = m_chartType;
 if (m_chartType == OWC.ChartChartTypeEnum.chChartTypePie3D)
            if (m_chartType == OWC.ChartChartTypeEnum.chChartTypePie3D) {
            { GifWidth = 254;
                GifWidth = 254; GifHeight = 280;
                GifHeight = 280; ImgWidth = "254px";
                ImgWidth = "254px"; objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionRight;
                objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionRight; }
            } if (m_chartType == OWC.ChartChartTypeEnum.chChartTypeColumnClustered)
            if (m_chartType == OWC.ChartChartTypeEnum.chChartTypeColumnClustered) {
            { GifWidth = 506;
                GifWidth = 506; GifHeight = 280;
                GifHeight = 280; ImgWidth = "506px";
                ImgWidth = "506px"; }
            }
 //图形标题
            //图形标题 objChart.HasTitle = true;
            objChart.HasTitle = true; objChart.Title.Caption = m_strChartTitle;
            objChart.Title.Caption = m_strChartTitle; objChart.Title.Font.Size = 10;
            objChart.Title.Font.Size = 10;
 for (int i = 0; i < m_nCount; i++)
            for (int i = 0; i < m_nCount; i++) {
            { string strValue = m_strValues[i];
                string strValue = m_strValues[i]; string strSeriesName = m_strSeries[i];
                string strSeriesName = m_strSeries[i];
 int iSer = i;
                int iSer = i;
 //添加一个series
                //添加一个series objChart.SeriesCollection.Add(iSer);
                objChart.SeriesCollection.Add(iSer);
 //给定series的名字
                //给定series的名字 objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimSeriesNames,
                objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimSeriesNames, +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
                +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
 //给定分类,横轴
                //给定分类,横轴 objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimCategories,
                objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimCategories, +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, m_strCategory);
                    +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, m_strCategory);
 //给定各分类的数值,纵轴
                //给定各分类的数值,纵轴 objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimValues,
                objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimValues, +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);
                    +(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);
 objChart.SeriesCollection[iSer].Line.set_Weight(OWC.LineWeightEnum.owcLineWeightThick);
                objChart.SeriesCollection[iSer].Line.set_Weight(OWC.LineWeightEnum.owcLineWeightThick); }
            }
 // 背景色
            // 背景色 objChart.PlotArea.Interior.Color = OWC.ChartColorIndexEnum.chColorNone;
            objChart.PlotArea.Interior.Color = OWC.ChartColorIndexEnum.chColorNone;
 objChart.Legend.Interior.SetTwoColorGradient(
            objChart.Legend.Interior.SetTwoColorGradient( Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
                Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal, Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
                 Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges, "LightGray", "White");
                 "LightGray", "White"); objChart.Legend.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
            objChart.Legend.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
 objCSpace.Interior.SetTwoColorGradient(
            objCSpace.Interior.SetTwoColorGradient( Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
                Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal, Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
                 Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges, "LightGray", "White");
                 "LightGray", "White"); objCSpace.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
            objCSpace.Border.Color = OWC.ChartColorIndexEnum.chColorNone; 
             //输出成GIF文件.
            //输出成GIF文件. m_strFileName = m_strFileName + ".gif";
            m_strFileName = m_strFileName + ".gif"; m_strAbsolutePath = m_strAbsolutePath + m_strFileName;
            m_strAbsolutePath = m_strAbsolutePath + m_strFileName; objCSpace.ExportPicture(m_strAbsolutePath, "GIF", GifWidth, GifHeight);
            objCSpace.ExportPicture(m_strAbsolutePath, "GIF", GifWidth, GifHeight); string strImageUrl = @"<img src='" + m_strPhysicalPath + m_strFileName + "' width='" + ImgWidth + "' />";
            string strImageUrl = @"<img src='" + m_strPhysicalPath + m_strFileName + "' width='" + ImgWidth + "' />"; return strImageUrl;
            return strImageUrl; }
        } catch (Exception ex)
        catch (Exception ex) {
        { return ex.Message;
            return ex.Message; }
        } }
    } }
}
大家要注意:字符串strCategory 和 字符串数组strValues 项都是以"\t"分隔的字符串,但最后不能以"\t"结束。
例如:strCategory = "周一\t周二\t周三\t周四\t周五\t周六\t周日"
其中的颜色和图的底色都是可以自己改变的,这个主要起到起步的作用,希望谁看到能画出更漂亮的图。
类的使用:
 DrawChart dc = new DrawChart(m_strSeries, m_strCategory, m_strValues, m_strChartTitle, m_strAbsolutePath,
DrawChart dc = new DrawChart(m_strSeries, m_strCategory, m_strValues, m_strChartTitle, m_strAbsolutePath, m_strPhysicalPath, m_strFileName, m_nCount, m_chartType);
                m_strPhysicalPath, m_strFileName, m_nCount, m_chartType); divChart.InnerHtml = dc.Draw();//divChart是在html页中随便一个div,当然runat=server了
            divChart.InnerHtml = dc.Draw();//divChart是在html页中随便一个div,当然runat=server了 
                    
                     
                    
                 
                    
                

 
     
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号