microsoft office web 组件(owc11)的编程(.net)
owc控件是microsoft office 图表控件(owc10为ofiiceXP的组件、owc11为office2003的组件,组件的路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\owc11,帮助文件的路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\2052),它可以生成三维图、柱状图、饼状图、趋势图和误差图,下面以生成三维图web应用程序为例:
添加引用:在“com选项卡”中选择“misrosoft office 11.0 object library”
using System;
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.OWC;
using System.Data.SqlClient;
using System.Data;
using System.Text;
namespace Demo.owc
{
/**//// <summary>
/// Pic 的摘要说明。
/// 利用OWC11进行作统计图的封装类。
/// </summary>
public class Owc11
{
public Owc11()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Owc11(string PhaysicalImagePath,string Title,string SeriesName)
{
this._phaysicalimagepath = PhaysicalImagePath;
this._title = Title;
this._seriesname = SeriesName;
}
# region 属性
private string _phaysicalimagepath; //物理路径
private string _title;//标题
private string _seriesname;
private int _picwidth;
private int _pichight;
private DataTable _datasourse;
private string strCategory; // x轴的值
private string strValue; //y州的值
public string PhaysicalImagePath
{
set {this._phaysicalimagepath = value;}
get {return this._phaysicalimagepath;}
}
public string Title
{
set{ this._title = value;}
get{ return this._title;}
}
public string SeriesName
{
set{ this._seriesname = value ;}
get { return this._seriesname;}
}
public int PicWidth
{
set { this._picwidth = value;}
get { return this._picwidth;}
}
public int PicHight
{
set { this._pichight = value;}
get { return this._pichight; }
}
public DataTable DataSource
{
set
{
this._datasourse = value;
this.strCategory = GetColumnsStr(this._datasourse);
this.strValue = this.GetValueStr(this._datasourse);
}
}
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 GetValueStr(DataTable dt)
{
StringBuilder strList = new StringBuilder();
foreach(DataRow r in dt.Rows)
{
strList.Append(r[1].ToString() + "\t");
}
return strList.ToString();
}
#endregion
/**//// <summary>
/// 柱形图
/// </summary>
public string CreateColumn()
{
ChartSpace cs = new ChartSpaceClass();//创建ChartSpace,来放置图表
ChChart objChart = cs.Charts.Add(0); /**/////在ChartSpace对象中添加图表,Add方法返回Chart对象
//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得
objChart.Type = Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeColumnClustered;//柱状图
objChart.HasLegend = true ; //指定是否需要图例;
objChart.HasTitle = true ; //标题
objChart.Title.Caption = this._title;
样式设置#region 样式设置
//旋转
// objChart.Rotation = 360;//表示指定三维图表的旋转角度
// 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: 年份";
objChart.Axes[1].HasTitle = true;
objChart.Axes[1].Title.Caption = "Y:数量";
Microsoft.Office.Interop.OWC.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
//给定series的名字
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimSeriesNames,Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),this.SeriesName);
//给定分类
//给定分类
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimCategories,
Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
//给定值
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimValues,
Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
//表示系列或趋势线上的单个数据标志
//小图和百分比
objChart.SeriesCollection[0].DataLabelsCollection.Add().HasValue = true;
// objChart.SeriesCollection[0].DataLabelsCollection.Add().HasPercentage = true;
// objChart.SeriesCollection[0].DataLabelsCollection.Add().Font.Name = "宋体";
string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
string strAbsolutePath = _phaysicalimagepath + "\\"+filename;
cs.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.
return filename;
}
/**//// <summary>
/// 饼图
/// </summary>
/// <returns></returns>
public string CreatePie()
{
ChartSpace cs = new ChartSpaceClass();//创建ChartSpace,来放置图表
ChChart objChart = cs.Charts.Add(0); /**/////在ChartSpace对象中添加图表,Add方法返回Chart对象
//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得
objChart.Type = Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypePie;//柱状图
objChart.HasLegend = true ; //指定是否需要图例;
objChart.HasTitle = true ; //标题
objChart.Title.Caption = this._title;
Microsoft.Office.Interop.OWC.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
//给定series的名字
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimSeriesNames,Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),this.SeriesName);
//给定分类
//给定分类
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimCategories,
Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
//给定值
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimValues,
Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
// Microsoft.Office.Interop.OWC.ChDataLabel dl = objChart.SeriesCollection[0].DataLabelsCollection.Add(); //图上的小文字
//表示系列或趋势线上的单个数据标志
//小图和百分比
// objChart.SeriesCollection[0].DataLabelsCollection.Add().HasValue = true;
objChart.SeriesCollection[0].DataLabelsCollection.Add().HasPercentage = true;
// objChart.SeriesCollection[0].DataLabelsCollection.Add().Font.Name = "宋体";
string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
string strAbsolutePath = _phaysicalimagepath + "\\"+filename;
cs.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.
return filename;
}
/**//// <summary>
/// 平滑曲线图
/// </summary>
/// <returns></returns>
public string CreateSmoothLine()
{
ChartSpace cs = new ChartSpaceClass();//创建ChartSpace,来放置图表
ChChart objChart = cs.Charts.Add(0); /**/////在ChartSpace对象中添加图表,Add方法返回Chart对象
//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得
objChart.Type = Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeSmoothLine;//柱状图
objChart.HasLegend = true ; //指定是否需要图例;
objChart.HasTitle = true ; //标题
objChart.Title.Caption = this._title;
//x,y轴的图示说明
objChart.Axes[0].HasTitle = true;
objChart.Axes[0].Title.Caption = "X: 年份";
objChart.Axes[1].HasTitle = true;
objChart.Axes[1].Title.Caption = "Y:数量";
Microsoft.Office.Interop.OWC.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
//给定series的名字
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimSeriesNames,Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),this.SeriesName);
//给定分类
//给定分类
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimCategories,
Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
//给定值
ThisChSeries.SetData(Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimValues,
Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
//表示系列或趋势线上的单个数据标志
//小图和百分比
// objChart.SeriesCollection[0].DataLabelsCollection.Add().HasValue = true;
// objChart.SeriesCollection[0].DataLabelsCollection.Add().HasPercentage = true;
// objChart.SeriesCollection[0].DataLabelsCollection.Add().Font.Name = "宋体";
string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
string strAbsolutePath = _phaysicalimagepath + "\\"+filename;
cs.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.
return filename;
}
}
}
使用 aspx页面
<%@ Page language="c#" Codebehind="PicTest.aspx.cs" AutoEventWireup="false" Inherits="Demo.owc.PicTest" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>PicTest</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<P>
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder></P>
<P>
<asp:Label id="列名" runat="server">列名</asp:Label>
<asp:DropDownList id="ddlClm" runat="server" Width="105px"></asp:DropDownList>
<asp:Label id="Label1" runat="server" Width="48px">图形</asp:Label>
<asp:DropDownList id="ddlPic" runat="server" Width="105">
<asp:ListItem Value="0">平滑曲线图</asp:ListItem>
<asp:ListItem Value="1">饼图</asp:ListItem>
<asp:ListItem Value="2">柱状图</asp:ListItem>
</asp:DropDownList>
<asp:Button id="Button1" runat="server" Width="56px" Text="确定"></asp:Button></P>
</FONT></FONT></FONT>
</form>
</body>
</HTML>
.cs文件
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.OWC;
using System.Data.SqlClient;
namespace Demo.owc
{
/**//// <summary>
/// PicTest 的摘要说明。
/// </summary>
public class PicTest : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label 列名;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DropDownList ddlClm;
protected System.Web.UI.WebControls.DropDownList ddlPic;
protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!this.Page.IsPostBack)
{
this.sb_InitDll();
this.sb_Init(0);
}
}
private void sb_Init(int i)
{
Owc11 chart = new Owc11();
chart.SeriesName = "图例";
string strTitle = this.ddlClm.SelectedItem.Text; //选择列的值
string FilePath = this.Server.MapPath(".");
chart.Title = strTitle + " " + this.ddlPic.SelectedItem.Text; //标题
chart.PhaysicalImagePath = FilePath;
chart.PicHight = 400;
chart.PicWidth = 600;
string strSql = "Select 年份, " + strTitle +" From Sheet "; //这里可以改你的Sql语句
chart.DataSource = this.dt(strSql); //这个是你的数据源
switch(i)
{
case 0:
FilePath += "\\" +chart.CreateSmoothLine(); //图片得到路径
break;
case 1:
FilePath += "\\" + chart.CreatePie();
break;
case 2:
FilePath += "\\" + chart.CreateColumn();
break;
}
//把图片添加到placeholder.
string strImageTag = "<IMG SRC='" + FilePath + "'/>";
PlaceHolder1.Controls.Add(new LiteralControl(strImageTag));
}
/**//// <summary>
/// 得到你要的数据,返回一个DataTable
/// </summary>
/// <param name="strSql">Sql语句</param>
/// <returns></returns>
private DataTable dt(string strSql)
{
string strConn = "Server = .;database = aa;uid = sa;pwd = 135246"; //数据库的连接放在这里,aa是数据库的名称 要修改成你自己的
SqlConnection cn = new SqlConnection(strConn);
SqlDataAdapter da = new SqlDataAdapter(strSql,cn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds.Tables[0];
}
/**//// <summary>
/// 初始化列
/// </summary>
private void sb_InitDll()
{
string strSql = "Select * From Sheet";
DataTable dt = this.dt(strSql);
ListItem lItem ;
for(int i= 1 ;i< dt.Columns.Count-1 ;i++)
{
lItem = new ListItem();
lItem.Text = dt.Columns[i].Caption.ToString();
lItem.Value =i.ToString();
this.ddlClm.Items.Add(lItem);
}
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
int i = Convert.ToInt16(this.ddlPic.SelectedValue);
this.sb_Init(i);
}
}
}
枚举类型枚举类型#region 枚举类型
/**//**//**//// <summary>
/// 枚举类型 对应于OWC的图表类型
/// </summary>
public enum ChartType:int
{
/**//**//**//// <summary>
/// 面积图
/// </summary>
chChartTypeArea = 29 ,
/**//**//**//// <summary>
/// 面积图3D
/// </summary>
chChartTypeArea3D = 60 ,
/**//**//**//// <summary>
/// 面积图重复
/// </summary>
chChartTypeAreaOverlapped3D = 61 ,
/**//**//**//// <summary>
/// 堆积面积图
/// </summary>
chChartTypeAreaStacked =30 ,
/**//**//**//// <summary>
/// 堆积面积图百分比图
/// </summary>
chChartTypeAreaStacked100 = 31 ,
/**//**//**//// <summary>
/// 堆积面积图百分比图3D
/// </summary>
chChartTypeAreaStacked1003D =63 ,
/**//**//**//// <summary>
/// 堆积面积图3D
/// </summary>
chChartTypeAreaStacked3D = 62 ,
/**//**//**//// <summary>
/// 横道图3D
/// </summary>
chChartTypeBar3D = 50 ,
/**//**//**//// <summary>
/// 横道图串风格
/// </summary>
chChartTypeBarClustered= 3 ,
/**//**//**//// <summary>
/// 横道图串风格3D
/// </summary>
chChartTypeBarClustered3D= 51 ,
/**//**//**//// <summary>
/// 堆横道图
/// </summary>
chChartTypeBarStacked = 4 ,
/**//**//**//// <summary>
/// 堆横道图百分比图
/// </summary>
chChartTypeBarStacked100 =5 ,
/**//**//**//// <summary>
/// 堆横道图百分比图3D
/// </summary>
chChartTypeBarStacked1003D = 53 ,
/**//**//**//// <summary>
/// 堆横道图3D
/// </summary>
chChartTypeBarStacked3D =52 ,
/**//**//**//// <summary>
/// 气泡图
/// </summary>
chChartTypeBubble = 27 ,
/**//**//**//// <summary>
/// 线形气泡图
/// </summary>
chChartTypeBubbleLine =28 ,
/**//**//**//// <summary>
/// 柱形图
/// </summary>
chChartTypeColumn3D =46 ,
/**//**//**//// <summary>
/// 3D柱形图
/// </summary>
chChartTypeColumnClustered = 0 ,
/**//**//**//// <summary>
/// 3D串柱形图
/// </summary>
chChartTypeColumnClustered3D = 47 ,
/**//**//**//// <summary>
/// 重叠柱形图
/// </summary>
chChartTypeColumnStacked =1 ,
/**//**//**//// <summary>
/// 100%重叠柱形图
/// </summary>
chChartTypeColumnStacked100 =2 ,
/**//**//**//// <summary>
/// 100%3D重叠柱形图
/// </summary>
chChartTypeColumnStacked1003D = 49 ,
/**//**//**//// <summary>
/// 3D柱形图
/// </summary>
chChartTypeColumnStacked3D = 48 ,
/**//**//**//// <summary>
/// 组合图
/// </summary>
chChartTypeCombo = -1 ,
/**//**//**//// <summary>
/// 3D组合图
/// </summary>
chChartTypeCombo3D = -2 ,
/**//**//**//// <summary>
/// 环形图
/// </summary>
chChartTypeDoughnut = 32 ,
/**//**//**//// <summary>
/// 破式环形图
/// </summary>
chChartTypeDoughnutExploded = 33 ,
/**//**//**//// <summary>
/// 折线图
/// </summary>
chChartTypeLine = 6,
/**//**//**//// <summary>
/// 3D折线图
/// </summary>
chChartTypeLine3D = 54 ,
/**//**//**//// <summary>
/// 制造折线图
/// </summary>
chChartTypeLineMarkers= 7,
/**//**//**//// <summary>
/// 重复折线图
/// </summary>
chChartTypeLineOverlapped3D= 55,
/**//**//**//// <summary>
/// 重叠折线图
/// </summary>
chChartTypeLineStacked = 8 ,
/**//**//**//// <summary>
/// 100%重叠折线图
/// </summary>
chChartTypeLineStacked100 =10 ,
/**//**//**//// <summary>
/// 100%3D重叠折线图
/// </summary>
chChartTypeLineStacked1003D= 57,
/**//**//**//// <summary>
/// 制造100%重叠折线图
/// </summary>
chChartTypeLineStacked100Markers = 11 ,
/**//**//**//// <summary>
/// 3D重叠折线图
/// </summary>
chChartTypeLineStacked3D = 56 ,
/**//**//**//// <summary>
/// 制造重叠折线图
/// </summary>
chChartTypeLineStackedMarkers = 9 ,
/**//**//**//// <summary>
/// 饼图
/// </summary>
chChartTypePie = 18 ,
/**//**//**//// <summary>
/// 3D饼图
/// </summary>
chChartTypePie3D =58 ,
/**//**//**//// <summary>
/// 破式饼图
/// </summary>
chChartTypePieExploded = 19 ,
/**//**//**//// <summary>
/// 3D破式饼图
/// </summary>
chChartTypePieExploded3D = 59 ,
/**//**//**//// <summary>
/// 重叠饼图
/// </summary>
chChartTypePieStacked = 20 ,
/**//**//**//// <summary>
/// 极坐标图
/// </summary>
chChartTypePolarLine = 42 ,
/**//**//**//// <summary>
/// 制造线形极坐标图
/// </summary>
chChartTypePolarLineMarkers = 43,
/**//**//**//// <summary>
/// 制造极坐标图
/// </summary>
chChartTypePolarMarkers = 41 ,
/**//**//**//// <summary>
/// 平滑线形极坐标图
/// </summary>
chChartTypePolarSmoothLine = 44 ,
/**//**//**//// <summary>
/// 制造平滑线形极坐标图
/// </summary>
chChartTypePolarSmoothLineMarkers = 45 ,
/**//**//**//// <summary>
/// 雷达图
/// </summary>
chChartTypeRadarLine= 34 ,
/**//**//**//// <summary>
/// 填充雷达图
/// </summary>
chChartTypeRadarLineFilled = 36 ,
/**//**//**//// <summary>
/// 制造雷达图
/// </summary>
chChartTypeRadarLineMarkers= 35 ,
/**//**//**//// <summary>
/// 平滑雷达图
/// </summary>
chChartTypeRadarSmoothLine = 37 ,
/**//**//**//// <summary>
/// 制造平滑雷达图
/// </summary>
chChartTypeRadarSmoothLineMarkers = 38 ,
/**//**//**//// <summary>
/// 线形散点图
/// </summary>
chChartTypeScatterLine = 25 ,
/**//**//**//// <summary>
/// 填充线形散点图
/// </summary>
chChartTypeScatterLineFilled = 26 ,
/**//**//**//// <summary>
/// 制造线形散点图
/// </summary>
chChartTypeScatterLineMarkers = 24 ,
/**//**//**//// <summary>
/// 制造散点图
/// </summary>
chChartTypeScatterMarkers = 21 ,
/**//**//**//// <summary>
/// 平滑散点图
/// </summary>
chChartTypeScatterSmoothLine = 23 ,
/**//**//**//// <summary>
/// 制造平滑散点图
/// </summary>
chChartTypeScatterSmoothLineMarkers = 22 ,
/**//**//**//// <summary>
/// 平滑线图
/// </summary>
chChartTypeSmoothLine = 12 ,
/**//**//**//// <summary>
/// 制造平滑线图
/// </summary>
chChartTypeSmoothLineMarkers = 13 ,
/**//**//**//// <summary>
/// 重叠平滑线图
/// </summary>
chChartTypeSmoothLineStacked = 14 ,
/**//**//**//// <summary>
/// 100%重叠平滑线图
/// </summary>
chChartTypeSmoothLineStacked100 = 16 ,
/**//**//**//// <summary>
/// 制造100%重叠平滑线图
/// </summary>
chChartTypeSmoothLineStacked100Markers = 17 ,
/**//**//**//// <summary>
/// 制造重叠平滑线图
/// </summary>
chChartTypeSmoothLineStackedMarkers = 15 ,
/**//**//**//// <summary>
/// 股价图
/// </summary>
chChartTypeStockHLC = 39 ,
/**//**//**//// <summary>
/// 股价图O型
/// </summary>
chChartTypeStockOHLC = 40
}
#endregion
学习,积累中......