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

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

/// <summary>
///
/// </summary>
/// <param name="strSeries">做标注的时候用的名字</param>
/// <param name="strCategory">横坐标上的值</param>
/// <param name="strValues">纵坐标上的值(可以是数组表示的,有多个曲线)</param>
/// <param name="charTitle">图的名</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="fileName">图片名</param>
/// <param name="Count">所画线的个数</param>
/// <param name="chartType">图类型</param>
public DrawChart(string[] strSeries, string strCategory, string[] strValues, string charTitle,
string AbsolutePath,string PhysicalPath, string fileName, int Count, OWC.ChartChartTypeEnum chartType)
{
m_strSeries = strSeries;
m_strCategory = strCategory;
m_strValues = strValues;
m_strFileName = fileName;
m_strChartTitle = charTitle;
m_nCount = Count;
m_chartType = chartType;
m_strAbsolutePath = AbsolutePath;
m_strPhysicalPath = PhysicalPath;
}
public string Draw()
{
try
{
int GifWidth = 762;
int GifHeight = 240;
string ImgWidth = "762px";
OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();

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

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

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

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

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

int iSer = i;

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

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

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

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

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

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

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

objCSpace.Interior.SetTwoColorGradient(
Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
"LightGray", "White");
objCSpace.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
//输出成GIF文件.
m_strFileName = m_strFileName + ".gif";
m_strAbsolutePath = m_strAbsolutePath + m_strFileName;
objCSpace.ExportPicture(m_strAbsolutePath, "GIF", GifWidth, GifHeight);
string strImageUrl = @"<img src='" + m_strPhysicalPath + m_strFileName + "' width='" + ImgWidth + "' />";
return strImageUrl;
}
catch (Exception ex)
{
return ex.Message;
}
}
}
DrawChart dc = new DrawChart(m_strSeries, m_strCategory, m_strValues, m_strChartTitle, m_strAbsolutePath,
m_strPhysicalPath, m_strFileName, m_nCount, m_chartType);
divChart.InnerHtml = dc.Draw();//divChart是在html页中随便一个div,当然runat=server了
下面还是给出代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using OWC = Microsoft.Office.Interop.Owc11;
/// <summary>
/// DrawChar 的摘要说明
/// </summary>
public class DrawChart
{
private string[] m_strSeries = null;
private string m_strCategory = string.Empty;
private string[] m_strValues = null;
private string m_strFileName = string.Empty;
private int m_nCount = 0;
private string m_strChartTitle = string.Empty;
string m_strAbsolutePath = string.Empty;
string m_strPhysicalPath = string.Empty;
OWC.ChartChartTypeEnum m_chartType;
/// <summary>
///
/// </summary>
/// <param name="strSeries">做标注的时候用的名字</param>
/// <param name="strCategory">横坐标上的值</param>
/// <param name="strValues">纵坐标上的值(可以是数组表示的,有多个曲线)</param>
/// <param name="charTitle">图的名</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="fileName">图片名</param>
/// <param name="Count">所画线的个数</param>
/// <param name="chartType">图类型</param>
public DrawChart(string[] strSeries, string strCategory, string[] strValues, string charTitle,
string AbsolutePath,string PhysicalPath, string fileName, int Count, OWC.ChartChartTypeEnum chartType)
{
m_strSeries = strSeries;
m_strCategory = strCategory;
m_strValues = strValues;
m_strFileName = fileName;
m_strChartTitle = charTitle;
m_nCount = Count;
m_chartType = chartType;
m_strAbsolutePath = AbsolutePath;
m_strPhysicalPath = PhysicalPath;
}
public string Draw()
{
try
{
int GifWidth = 762;
int GifHeight = 240;
string ImgWidth = "762px";
OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass();
//在ChartSpace对象中添加图表,Add方法返回chart对象
OWC.ChChart objChart = objCSpace.Charts.Add(0);
//指定图表是否需要图例
objChart.HasLegend = true;
objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionBottom;
objChart.Type = m_chartType;
if (m_chartType == OWC.ChartChartTypeEnum.chChartTypePie3D)
{
GifWidth = 254;
GifHeight = 280;
ImgWidth = "254px";
objChart.Legend.Position = OWC.ChartLegendPositionEnum.chLegendPositionRight;
}
if (m_chartType == OWC.ChartChartTypeEnum.chChartTypeColumnClustered)
{
GifWidth = 506;
GifHeight = 280;
ImgWidth = "506px";
}
//图形标题
objChart.HasTitle = true;
objChart.Title.Caption = m_strChartTitle;
objChart.Title.Font.Size = 10;
for (int i = 0; i < m_nCount; i++)
{
string strValue = m_strValues[i];
string strSeriesName = m_strSeries[i];
int iSer = i;
//添加一个series
objChart.SeriesCollection.Add(iSer);
//给定series的名字
objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimSeriesNames,
+(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
//给定分类,横轴
objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimCategories,
+(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, m_strCategory);
//给定各分类的数值,纵轴
objChart.SeriesCollection[iSer].SetData(OWC.ChartDimensionsEnum.chDimValues,
+(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);
objChart.SeriesCollection[iSer].Line.set_Weight(OWC.LineWeightEnum.owcLineWeightThick);
}
// 背景色
objChart.PlotArea.Interior.Color = OWC.ChartColorIndexEnum.chColorNone;
objChart.Legend.Interior.SetTwoColorGradient(
Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
"LightGray", "White");
objChart.Legend.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
objCSpace.Interior.SetTwoColorGradient(
Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientHorizontal,
Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges,
"LightGray", "White");
objCSpace.Border.Color = OWC.ChartColorIndexEnum.chColorNone;
//输出成GIF文件.
m_strFileName = m_strFileName + ".gif";
m_strAbsolutePath = m_strAbsolutePath + m_strFileName;
objCSpace.ExportPicture(m_strAbsolutePath, "GIF", GifWidth, GifHeight);
string strImageUrl = @"<img src='" + m_strPhysicalPath + m_strFileName + "' width='" + ImgWidth + "' />";
return strImageUrl;
}
catch (Exception ex)
{
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,
m_strPhysicalPath, m_strFileName, m_nCount, m_chartType);
divChart.InnerHtml = dc.Draw();//divChart是在html页中随便一个div,当然runat=server了


浙公网安备 33010602011771号