在asp.net中调用Office来制作各种(3D)统计图

原创 2004年09月14日 19:23:00

 

1、下载owc11 COM组件

http://www.microsoft.com/downloads/details.aspx?FamilyID=7287252c-402e-4f72-97a5-e0fd290d4b76&displaylang=en 

2、注册owc11

  安装下载的文件,然后在工程中添加 Microsoft Office Web Components 11.0 的COM组件

3、在工程中添加

    using OWC11;

4、开始coding  举例如下:

 public class ChartFactory
 {
  public ChartFactory()
  {
   InitTypeMap();
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  protected System.Web.UI.WebControls.Image imgHondaLineup;
  private string[] chartCategoriesArr;
  private string[] chartValuesArr;
  private OWC11.ChartChartTypeEnum chartType =  OWC11.ChartChartTypeEnum.chChartTypeColumn3D;//默认值
  private static Hashtable chartMap = new Hashtable();
  private static string chartTypeCh = "垂直柱状图" ;
  private static string chartTitle = "";

  private void InitTypeMap()
  {
   chartMap.Clear();
   OWC11.ChartChartTypeEnum[] chartTypes = new OWC11.ChartChartTypeEnum[]{ ChartChartTypeEnum.chChartTypeColumnClustered,
                    ChartChartTypeEnum.chChartTypeColumn3D,
                    ChartChartTypeEnum.chChartTypeBarClustered,
                    ChartChartTypeEnum.chChartTypeBar3D,
                    ChartChartTypeEnum.chChartTypeArea,
                    ChartChartTypeEnum.chChartTypeArea3D,
                    ChartChartTypeEnum.chChartTypeDoughnut,
                    ChartChartTypeEnum.chChartTypeLineStacked,
                    ChartChartTypeEnum.chChartTypeLine3D,
                    ChartChartTypeEnum.chChartTypeLineMarkers,
                    ChartChartTypeEnum.chChartTypePie,
                    ChartChartTypeEnum.chChartTypePie3D,
                    ChartChartTypeEnum.chChartTypeRadarSmoothLine,
                    ChartChartTypeEnum.chChartTypeSmoothLine};
   string[] chartTypesCh = new string [] {"垂直柱状统计图","3D垂直柱状统计图","水平柱状统计图","3D水平柱状统计图","区域统计图","3D区域统计图","中空饼图","折线统计图","3D折线统计图","折线带点统计图","饼图","3D饼图","网状统计图","弧线统计图"};
   
   for(int i=0;i   {
    chartMap.Add(chartTypesCh[i],chartTypes[i]);
   }
  }

  public ChartSpaceClass BuildCharts ()
  {
   string chartCategoriesStr = String.Join ("/t", chartCategoriesArr);
   string chartValuesStr = String.Join ("/t", chartValuesArr);

   OWC11.ChartSpaceClass       oChartSpace = new OWC11.ChartSpaceClass ();

   // ------------------------------------------------------------------------
   // Give pie and doughnut charts a legend on the bottom. For the rest of
   // them let the control figure it out on its own.
   // ------------------------------------------------------------------------

   chartType = (ChartChartTypeEnum)chartMap[chartTypeCh];

   if (chartType == ChartChartTypeEnum.chChartTypePie ||
    chartType == ChartChartTypeEnum.chChartTypePie3D ||
    chartType == ChartChartTypeEnum.chChartTypeDoughnut)
   {
    oChartSpace.HasChartSpaceLegend = true;
    oChartSpace.ChartSpaceLegend.Position = ChartLegendPositionEnum.chLegendPositionBottom;
   }

   oChartSpace.Border.Color = "blue";
   oChartSpace.Charts.Add(0);
   oChartSpace.Charts[0].HasTitle = true;
   oChartSpace.Charts[0].Type = chartType;
   oChartSpace.Charts[0].ChartDepth = 125;
   oChartSpace.Charts[0].AspectRatio = 80;
   oChartSpace.Charts[0].Title.Caption = chartTitle;
   oChartSpace.Charts[0].Title.Font.Bold = true;

   oChartSpace.Charts[0].SeriesCollection.Add(0);
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection.Add ();

   // ------------------------------------------------------------------------
   // If you're charting a pie or a variation thereof percentages make a lot
   // more sense than values...
   // ------------------------------------------------------------------------
   if (chartType == ChartChartTypeEnum.chChartTypePie ||
    chartType == ChartChartTypeEnum.chChartTypePie3D ||
    chartType == ChartChartTypeEnum.chChartTypeDoughnut)
   {
    oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasPercentage = true;
    oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasValue = false;
   }
    // ------------------------------------------------------------------------
    // Not so for other chart types where values have more meaning than
    // percentages.
    // ------------------------------------------------------------------------
   else
   {
    oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasPercentage = false;
    oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasValue = true;
   }
               
   // ------------------------------------------------------------------------
   // Plug your own visual bells and whistles here
   // ------------------------------------------------------------------------
   oChartSpace.Charts[0].SeriesCollection[0].Caption = String.Empty;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Name = "verdana";
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Size = 10;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Bold = true;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Color = "red";
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Position = ChartDataLabelPositionEnum.chLabelPositionCenter;
   
   if (chartType == ChartChartTypeEnum.chChartTypeBarClustered ||
    chartType == ChartChartTypeEnum.chChartTypeBar3D ||
    chartType == ChartChartTypeEnum.chChartTypeColumnClustered ||
    chartType == ChartChartTypeEnum.chChartTypeColumn3D)
   {
    oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Position = ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
   }
   
   oChartSpace.Charts[0].SeriesCollection[0].SetData (OWC11.ChartDimensionsEnum.chDimCategories,
    Convert.ToInt32(OWC11.ChartSpecialDataSourcesEnum.chDataLiteral), chartCategoriesStr);

   oChartSpace.Charts[0].SeriesCollection[0].SetData (OWC11.ChartDimensionsEnum.chDimValues,
    Convert.ToInt32(OWC11.ChartSpecialDataSourcesEnum.chDataLiteral), chartValuesStr);

   return oChartSpace;
  }

  #region  属性设置
  public string[] chartCategoriesArrValue
  {
   get
   {
    return chartCategoriesArr;
   }
   set
   {
    chartCategoriesArr = value;
   }
  }

  public string[] chartValuesArrValue
  {
   get
   {
    return chartValuesArr;
   }
   set
   {
    chartValuesArr = value;
   }
  }
  public string chartTypeValue
  {
   get
   {
    return chartTypeCh;
   }
   set
   {
    chartTypeCh = value;
   }
  }
  public string chartTitleValue
  {
   get
   {
    return chartTitle;
   }
   set
   {
    chartTitle = value;
   }
  }
  #endregion
 }

 

//调用   首先需要在页面上放置一个Image来显示产生的统计图

  public void ShowChart()
  {

//初始化赋值
   chartFactory.chartCategoriesArrValue = chartCategories;
   chartFactory.chartValuesArrValue = chartValues;
   chartFactory.chartTitleValue = chartTitle;
   chartFactory.chartTypeValue = chartType;

   OWC11.ChartSpaceClass oChartSpace = chartFactory.BuildCharts();
   string path = Server.MapPath(".") + @"/images/Chart.jpeg";  //产生图片并保存 页可以是png gif图片
   oChartSpace.ExportPicture(path,"jpeg", 745, 500);
   Image1.ImageUrl = path;  // 显示统计图
  }

// 保存统计图请参照上一篇文章

//由于每次生成的统计图都会覆盖原来的图片所以有必要的话可以用日期加时间的方式来作为图片的名字,但是这样将会产生很多图片需及时处理,如不需要只需取同名覆盖原来图片即可。

如何在ASP.Net中动态的创建柱状和饼状统计图

在GDI+基类 的的主要命名空间System.Drawing中,提供了Bitmap、Graphics类,其中Bitmap类封装了GDI+位图,继承自Image类,用于处理由像素数据定义的图像。该类常用...
  • zpp19901988
  • zpp19901988
  • 2015年07月23日 10:05
  • 575

C# 绘制统计图(柱状图, 折线图, 扇形图)

微软图表控件MsChart 下面是下载地址:     控件:Microsoft .NET Framework 3.5 的 Microsoft 图表控件(Microsoft Chart Cont...
  • ycl295644
  • ycl295644
  • 2015年03月30日 14:43
  • 2629

自定义圆形统计图(静态)

最近项目中有这个需求,将总资产的组成以图形的形态展现出来,所以就写了个自定义View来实现这个需求。     其实试下这个思路还是挺简单的,因为只需要在onDraw方法中使用画笔画出一个又一...
  • u010998327
  • u010998327
  • 2016年06月23日 18:35
  • 1665

Asp.net操作Excel(终极方法NPOI)

前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Off...
  • lllljz
  • lllljz
  • 2015年04月23日 22:12
  • 777

告别.NET生成报表统计图的烦恼(ASP.NET Chart)

告别.NET生成报表统计图的烦恼(ASP.NET Chart) 2009/5/9 23:45:45      信息系统大多会涉及到数据的统计,如数据的导出及生成统计对比图等,记得之前有一次...
  • mobingdetong
  • mobingdetong
  • 2014年03月29日 13:17
  • 2027

[android] 绘制统计图

有几种可以利用的工具库: - aChartEngine (http://code.google.com/p/achartengine/) - Java4Less Charts for ...
  • glen1943
  • glen1943
  • 2013年03月13日 14:28
  • 1658

使用amCharts绘制统计图表(柱状图、折线图、3D图)

amCharts是一款优秀的数据可视化js图形库,包括Javascript Charts, Javascript Stock Chart和Interactive Javascript Maps三类产品...
  • Cherry_tly
  • Cherry_tly
  • 2015年08月19日 17:35
  • 3444

Office发布2016新版,制图神技能亮瞎众人

近日微软的Office2016发布了,这意味着什么? 接下来小编就为你解读用Office2016装逼的正确姿势,至于想要怎么下载免费+正版的Office2016,嘿嘿,到文末...
  • kaifeng2988
  • kaifeng2988
  • 2015年12月17日 11:35
  • 1826

ASP.NET中制作各种3D图表的方法

这篇文章主要给大家介绍如何在ASP.NET中如何制作3D图表。大家都知道图表在ASP.NET技术中是一种特别受欢迎而又很重要的工具。图表是表示数据的图形,一般含有X和Y两个坐标轴。我们可以用折线,柱状...
  • u013948190
  • u013948190
  • 2017年03月06日 20:06
  • 258

在qt下使用qwt进行的统计图的绘制(配置 简单使用这些)

正好遇到需要在qt里进行一个
  • chaney_f
  • chaney_f
  • 2014年09月23日 15:18
  • 1536
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在asp.net中调用Office来制作各种(3D)统计图
举报原因:
原因补充:

(最多只允许输入30个字)