1、OWC介绍
在Microsoft Office 2003中包含有一组称为OWC的新控件集合。利用这些组件,可以在Web浏览器及其他传统的编程环境下,创建许多有用的数据分析解决方案和报表生成解决方案。下面几篇文章是使用OWC组件生成图表方面的相关知识。
OWC是与Microsoft Office一起安装的一组ActiveX控件。如果在计算机上安装了Office Web组件,则可以在Internet Explorer 5.01 SP2或更高版本中对电子表格、数据透视表和图表进行交互访问。如果在Microsoft Access的数据访问页中使用这些组件,则需要安装Internet Explorer 5.01 SP2或更高版本。如果计算机上未安装Office Web组件,可以从Microsoft公司的网站下载Office Web组件。这样,用户无须在计算机上安装Office软件,就可使用OWC。
OWC库中包含了Spreadsheet(电子数据表)组件、Chart(图表)组件、PivotTable(数据透视表)组件和Data Source(数据源)4个组件。Office Web Components的非凡之处在于它们可以在诸如Web页面、Visual Basic表单等控件容器中使用,也可在内存中作为不可见的对象使用。大多数COM控件只能在控件容器中作为可视控件使用,而大多数不可见对象则只能在内存中使用,而不能放入表单中或Web页面中。
2、设计思路
在使用OWC组件生成图片之前,首先需要将OWC组件引用到网站工程中。引用OWC组件之后,需要创建一个图表控件,然后在图表控件中添加一个图表对象,并且设置图表对象的相关属性,获得图表块的数据信息,最后使用图表控件的方法生成一个保存有图表数据信息的图片,在Web网页中通过调用该图片显示生成的图表信息,具体实现的设计思路如下图所示。
3、前台代码
<img alt="" src="temp.gif" style="width: 600px; height: 450px" />
4、后台代码
4.1、项目添加引用 Microsoft Office Web Components 11.0。
4.2、在文件里面引用如下
using Microsoft.Office.Interop.Owc11;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
4.3、具体程序代码
namespace GenerateCharts
{
public partial class Column : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//创建图表空间
ChartSpace myspace = new ChartSpace();
//添加一个图表对象
ChChart mychart = myspace.Charts.Add(0);
mychart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;//柱形
//mychart.Type = ChartChartTypeEnum.chChartTypeBarClustered;//条形图
//mychart.Type = ChartChartTypeEnum.chChartTypeLine;//折线图
//mychart.Type = ChartChartTypeEnum.chChartTypeArea;//面积图
//mychart.Type = ChartChartTypeEnum.chChartTypeArea3D;//3D面积图
//mychart.Type = ChartChartTypeEnum.chChartTypeBar3D;//3D条形图
//mychart.Type = ChartChartTypeEnum.chChartTypeColumn3D;//3D柱形图
//...等
//设置图表相关属性
mychart.HasLegend = true;
mychart.HasTitle = true;
mychart.Title.Caption = "员工信息图表";
//设置X,Y轴坐标
mychart.Axes[0].HasTitle = true;
mychart.Axes[0].Title.Caption = "籍贯";
mychart.Axes[1].HasTitle = true;
mychart.Axes[1].Title.Caption = "人数";
//连接并且打开数据库
SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ConnectionString);
sqlcon.Open();
string strsqls = "select 籍贯, count(籍贯) as 人数 from tb_ygxx group by 籍贯";
SqlDataAdapter adsa = new SqlDataAdapter(strsqls, sqlcon);
DataSet adds = new DataSet();
adsa.Fill(adds);
if (adds.Tables[0].Rows.Count > 0)
{
//添加图表
for (int i = 0; i < adds.Tables[0].Rows.Count; i++)
{
mychart.SeriesCollection.Add(0);
}
//添加图表数据
for (int j = 0; j < adds.Tables[0].Rows.Count; j++)
{
//设置图表块属性
mychart.SeriesCollection[j].Caption = adds.Tables[0].Rows[j][0].ToString();
mychart.SeriesCollection[j].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, adds.Tables[0].Rows[j][0].ToString());
mychart.SeriesCollection[j].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, Convert.ToInt32(adds.Tables[0].Rows[j][1].ToString()));
}
}
sqlcon.Close();
//生成图表
myspace.ExportPicture(Server.MapPath(".") + @"\temp.gif", "gif", 600, 450);
}
}
}
注:在自己项目Web.config里面配置数据库连接串。
4.4、数据结果如下