C#编写OWC11组件(转贴)

本文介绍了一个用于生成各种类型图表的类OWCChart11,该类通过设置不同的属性如图表类型、标题、坐标轴标签等,利用OWC (Object Web Components) 库来创建并导出不同样式的图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 using System;
using System.Data;
using System.Text;

namespace FishPro
{
    
/// <summary>
    
/// 使用 OWCChart11 生成各种图表
    
/// 
    
/// 
    
/// </summary>

    public class OWCChart11
    
{
        
#region 属性
        
private string m_SavePath;
        
private string m_Category;
        
private string m_Value;
        
private DataTable m_DataSource;
        
private string m_SeriesName;
        
private string m_Title;
        
private string m_AxesXTitle;
        
private string m_AxesYTitle;
        
private int m_PicWidth;
        
private int m_PicHeight;
        
private int m_Type;
        
private string m_FileName;

        
/// <summary>
        
/// 保存图片的路径和名称,物理路径
        
/// </summary>

        public string SavePath
        
{
            
get{return m_SavePath;}
            
set{m_SavePath=value;}
        }

        
        
/// <summary>
        
/// 直接获得类型
        
/// </summary>

        public string OCategory
        
{
            
get{return m_Category;}
            
set{m_Category=value;}
        }

        
        
/// <summary>
        
/// 直接获得值
        
/// </summary>

        public string OValue
        
{
            
get{return m_Value;}
            
set{m_Value=value;}
        }



        
/// <summary>
        
/// 以表格DataTable的形式获取原始数据
        
/// </summary>

        public DataTable DataSource
        
{
            
get{return m_DataSource;}
            
set
            
{
                m_DataSource
=value;
                m_Category
=GetColumnsStr(m_DataSource);
                m_Value
=GetValueStr(m_DataSource);
            }

        }

        
        
/// <summary>
        
/// 简要说明
        
/// </summary>

        public string SeriesName
        
{
            
get{return m_SeriesName;}
            
set{m_SeriesName=value;}
        }

        
        
/// <summary>
        
/// 图表的总标题,说明图表的简单意思
        
/// </summary>

        public string Title
        
{
            
get{return m_Title;}
            
set{m_Title=value;}
        }


        
/// <summary>
        
/// 图表横坐标标题,说明横坐标的意义
        
/// </summary>

        public string AxesXTitle
        
{
            
get{return m_AxesXTitle;}
            
set{m_AxesXTitle=value;}
        }


        
/// <summary>
        
/// 图表纵坐标标题,说明纵坐标的意义
        
/// </summary>

        public string AxesYTitle
        
{
            
get{return m_AxesYTitle;}
            
set{m_AxesYTitle=value;}
        }

        
        
/// <summary>
        
///  生成的图片宽度
        
/// </summary>

        public int PicWidth
        
{
            
get{return m_PicWidth;}
            
set{m_PicWidth=value;}
        }


        
/// <summary>
        
///  生成的图片高度
        
/// </summary>

        public int PicHeight
        
{
            
get{return m_PicHeight;}
            
set{m_PicHeight=value;}
        }


        
/// <summary>
        
/// 类型
        
/// chChartTypeColumnStacked100 =2 
        
///chChartTypeColumnStacked1003D = 49 
        
///chChartTypeColumnStacked3D = 48 
        
///chChartTypeCombo = -1 
        
///chChartTypeCombo3D = -2 
        
///chChartTypeDoughnut = 32 
        
///chChartTypeDoughnutExploded = 33 
        
///chChartTypeLine = 6 
        
///chChartTypeLine3D = 54 
        
///chChartTypeLineMarkers=  7 
        
///chChartTypeLineOverlapped3D=  55 
        
///chChartTypeLineStacked = 8 
        
///chChartTypeLineStacked100  =10 
        
///chChartTypeLineStacked1003D=  57 
        
///chChartTypeLineStacked100Markers = 11 
        
///chChartTypeLineStacked3D = 56 
        
///chChartTypeLineStackedMarkers = 9 
        
///chChartTypePie = 18 
        
///chChartTypePie3D =58 
        
///chChartTypePieExploded = 19 
        
///chChartTypePieExploded3D = 59 
        
///chChartTypePieStacked = 20 
        
///chChartTypePolarLine = 42 
        
///chChartTypePolarLineMarkers = 43 
        
///chChartTypePolarMarkers = 41 
        
///chChartTypePolarSmoothLine = 44 
        
///chChartTypePolarSmoothLineMarkers = 45 
        
///chChartTypeRadarLine=  34 
        
///chChartTypeRadarLineFilled = 36 
        
///chChartTypeRadarLineMarkers=  35 
        
///chChartTypeRadarSmoothLine = 37 
        
///chChartTypeRadarSmoothLineMarkers = 38 
        
///chChartTypeScatterLine = 25 
        
///chChartTypeScatterLineFilled = 26 
        
///chChartTypeScatterLineMarkers = 24 
        
///chChartTypeScatterMarkers = 21 
        
///chChartTypeScatterSmoothLine = 23 
        
///chChartTypeScatterSmoothLineMarkers = 22 
        
///chChartTypeSmoothLine = 12 
        
///chChartTypeSmoothLineMarkers = 13 
        
///chChartTypeSmoothLineStacked = 14 
        
///chChartTypeSmoothLineStacked100 = 16 
        
///chChartTypeSmoothLineStacked100Markers = 17 
        
///chChartTypeSmoothLineStackedMarkers = 15 
        
///chChartTypeStockHLC = 39 
        
///chChartTypeStockOHLC = 40 
        
/// </summary>

        public int Type
        
{
            
get{return m_Type;}
            
set{m_Type=value;}
        }


        
public string FileName
        
{
            
get{return m_FileName;}
            
set
            
{
                m_FileName
=value;
                
if(m_FileName==null||m_FileName=="")
                
{
                    m_FileName
=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";//生成图片名称
                }

            }

        }


        
/// <summary>
        
/// 是DataTable的转换
        
/// </summary>
        
/// <param name="dt"></param>
        
/// <returns></returns>

        private string GetColumnsStr(DataTable dt)
        
{
            StringBuilder strList
=new StringBuilder();
            
foreach(DataRow r in dt.Rows)
            
{
                strList.Append(r[
0].ToString()+'/t');
            }

            
return strList.ToString();
        }


        
/// <summary>
        
/// 是DataTable的转换
        
/// </summary>
        
/// <param name="dt"></param>
        
/// <returns></returns>

        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


        
#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


        
#region 构造函数
        
public OWCChart11()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
public OWCChart11(string SavePath,string SeriesName,string Title,int ChartType)
        
{
            m_SavePath
=SavePath;
            m_SeriesName
=SeriesName;
            m_Title
=Title;
            m_Type
=ChartType;
        }


        
public OWCChart11(string SavePath,string SeriesName,string Title,int ChartType,string AxesXTitle,string AxesYTitle)
        
{
            m_SavePath
=SavePath;
            m_SeriesName
=SeriesName;
            m_Title
=Title;
            m_AxesXTitle
=AxesXTitle;
            m_AxesYTitle
=AxesYTitle;
            m_Type
=ChartType;
        }


        
public OWCChart11(string SavePath,string SeriesName,string Title,int ChartType,string AxesXTitle,string AxesYTitle,int PicWidth,int PicHeight)
        
{
            m_SavePath
=SavePath;
            m_SeriesName
=SeriesName;
            m_Title
=Title;
            m_AxesXTitle
=AxesXTitle;
            m_AxesYTitle
=AxesYTitle;
            m_PicWidth
=PicWidth;
            m_PicHeight
=PicHeight;
            m_Type
=ChartType;
        }

        
#endregion


        
public bool Create()
        
{
            
//声明对象
            Microsoft.Office.Interop.Owc11.ChartSpace ThisChart = new  Microsoft.Office.Interop.Owc11.ChartSpaceClass();
            Microsoft.Office.Interop.Owc11.ChChart ThisChChart  
= ThisChart.Charts.Add(0);
            Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries 
= ThisChChart.SeriesCollection.Add(0);
            
            
//显示图例
            ThisChChart.HasLegend = true;

            
//显示标题选项
            ThisChChart.HasTitle = true;
            ThisChChart.Title.Font.Name
="黑体";
            ThisChChart.Title.Font.Size
=14;
            ThisChChart.Title.Caption 
= m_Title;//from

            
//x,y轴说明
            
//x
            ThisChChart.Axes[0].HasTitle=true;
            ThisChChart.Axes[
0].Title.Font.Name="黑体";
            ThisChChart.Axes[
0].Title.Font.Size=12;
            ThisChChart.Axes[
0].Title.Caption=m_AxesXTitle;

            ThisChChart.Axes[
1].HasTitle=true;
            ThisChChart.Axes[
1].Title.Font.Name="黑体";
            ThisChChart.Axes[
1].Title.Font.Size=12;
            ThisChChart.Axes[
1].Title.Caption=m_AxesYTitle;

            
//图表类型
            ThisChChart.Type=(Microsoft.Office.Interop.Owc11.ChartChartTypeEnum) m_Type;
//            switch(m_Type)
//            {
//                case 0:    
//                    ThisChChart.Type =(Microsoft.Office.Interop.Owc11.ChartChartTypeEnum) m_Type;// Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumn3D;//柱状图3D 
//                    break;
//                case 1:
//                    ThisChChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeBar3D;//横道图3D
//                    break;
//                case 2:
//                    ThisChChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeSmoothLine;//平滑曲线图
//                    break;
//                case 3:
//                    ThisChChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypePie;//圆饼图
//                    
//
//                    break;
//            }
            
//旋转
            ThisChChart.Rotation  = 360;
            ThisChChart.Inclination 
= 10;
            
//背景颜色
            ThisChChart.PlotArea.Interior.Color = "red";
            
//底座颜色
            ThisChChart.PlotArea.Floor.Interior.Color = "green";
            
            
//ThisChChart.Overlap = 50;

            
//给定series的名字
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),m_SeriesName);
            
//给定分类
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),m_Category);
            
//给定值
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),m_Value);

            Microsoft.Office.Interop.Owc11.ChDataLabels dl
=ThisChChart.SeriesCollection[0].DataLabelsCollection.Add();   
            dl.HasValue
=true;
            
//dl.HasPercentage=true;   
            
//导出图像文件
            try
            
{       
                
if(m_FileName==null||m_FileName=="")
                
{
                    m_FileName
=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";//生成图片名称
                }

                ThisChart.ExportPicture(m_SavePath
+"//"+m_FileName,"gif",m_PicWidth,m_PicHeight);
                
return true;
            }
            
            
catch(Exception ee)                   
            
{
                
return false;                              
            }

            
return false;
        }

        
    }

}

Retrieving the COM class factory for component with CLSID {0002E55D-0000-0000-C000-000000000046} failed due to the following error: 80040154. 收藏 Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {0002E55D-0000-0000-C000-000000000046} failed due to the following error: 80040154. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace: [COMException (0x80040154): Retrieving the COM class factory for component with CLSID {0002E55D-0000-0000-C000-000000000046} failed due to the following error: 80040154.] GraphPage.Page_Load(Object sender, EventArgs e) +1097 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +99 System.Web.UI.Control.LoadRecursive() +50 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 -------------------------------------------------------------------------------- Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 请大家帮忙 谢谢 Server Error in '/' Application. -------------------------------------------------------------------------------- Retrieving the COM class factory for component with CLSID {0002E55D-0000-0000-C000-000000000046} failed due to the following error: 80040154.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值