asp.net中调用Office来制作3D统计图

asp.net中调用Office来制作3D统计图


作者: 佚名  &;nbsp来自:网络


               
     1、首先下载owc11 COM组件
 
        [点击下载]
 
    2、注册owc11
 
    在工程中添加 C:\Program Files\Common Files\Microsoft Shared\Web Components\11  文件下的owc11.dll引用
 
    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<chartTypes.Length;i  )
    {
    chartMap.Add(chartTypesCh,chartTypes);
    }
    }
    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;  // 显示统计图
    }
 
 
    // 保存统计图请参照上一篇文章
 
    //由于每次生成的统计图都会覆盖原来的图片所以有必要的话可以用日期加时间的方式来作为图片的名字,但是这样将会产生很多图片需及时处理,如不需要只需取同名覆盖原来图片即可。
 
    (2005-11-14:04:14)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Asp.Net] 的这些文章也感兴趣:

用ASP生成XBM数字图片(可用来生成验证码)
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作
ASP.NET编程中的十大技巧
RegularExpressionValidator
ASP.NET图形化的曲线图类
Asp.net导航控件真的值得用吗?
使用ASP.NET 2.0提供的WebResource管理资源
用aspnet_compiler发布网站
充分利用ASP.NET的三种缓存提高站点性能的注意方法
Creating a Custom Pager for GridView