Winform 如何在form上嵌入一个Excel图表呢???

解决方案 »

  1.   

    網上很多的
    http://community.csdn.net/Expert/topic/3430/3430753.xml?temp=.9537165
      

  2.   

    //excel的变量

    private Excel.ApplicationClass my=null;
    private Excel.Workbook mybook=null;
    private Excel.Worksheet mysheet=null;
    //设置空值
    object objMissing=System.Reflection.Missing.Value;
    //打开excel文件
      my=new Excel.ApplicationClass();
             
    my.Visible=true;

    //打开工作簿
        mybook=my.Workbooks.Open(path1.Trim(),objMissing,objMissing, objMissing, 
    objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing);   mysheet=(Excel.Worksheet)mybook.Worksheets.get_Item(1);
    string a=((Excel.Range)mysheet.Cells[k,t]).Text
      

  3.   

    参看本的帖子
    http://community.csdn.net/Expert/topic/3417/3417163.xml?temp=.9710504发布一个操作Excel类库 功能 excel文件创建修改 单元格数据格式编辑 图片 图表 插入控制 外部数据的添加 插入等下载地址:http://www.journeychina.com/OfficeEditor/ExcelEditor提供以下方法:'创建一个Excel对象
       Public Sub Creat()
        
     '打开一个Excel对象
        Public Sub Open(ByVal FileName As String)
        参数描述:FileName :excel文件路径 '获取一个工作表  
        Public Function GetSheet(ByVal SheetName As String) As Excel.Worksheet
        参数描述:SheetName :工作表名称 '添加一个工作表
        Public Function AddSheet(ByVal SheetName As String) As Excel.Worksheet '删除一个工作表
        Public Function DelSheet(ByVal SheetName As String) '重命名一个工作表    Public Function ReNameSheet(ByVal OldSheetName As String, ByVal NewSheetName As String) As Excel.Worksheet    Public Function ReNameSheet(ByVal Sheet As Excel.Worksheet, ByVal NewSheetName As String) As Excel.Worksheet
     '设置一个单元格的值    Public Sub SetCellValue(ByVal ws As Excel.Worksheet, ByVal x As Integer, ByVal y As Integer, ByVal value As Object)     参数说明  ws:要设值的工作表  X行Y列  value 值
        Public Sub SetCellValue(ByVal ws As String, ByVal x As Integer, ByVal y As Integer, ByVal value As Object)
     ' 设置一个单元格的属性 字体, 大小,颜色 ,对齐方式    Public Sub SetCellProperty(ByVal ws As Excel.Worksheet, ByVal Startx As Integer, ByVal Starty As Integer, ByVal Endx As Integer, ByVal Endy As Integer, ByVal size As Integer, Optional ByVal name As String = "宋体", Optional ByVal color As Excel.Constants = Excel.Constants.xlAutomatic, Optional ByVal HorizontalAlignment As Excel.Constants = Excel.Constants.xlLeft)
     参数说明 :ws:要设值的工作表 Startx 起始单元格的行 Starty 起始单元格的列 Endx 结束单元格的行 Endy 结束单元格的列   size  字体大小 name 字体   color  颜色 HorizontalAlignment  对齐方式    Public Sub SetCellProperty(ByVal wsn As String, ByVal Startx As Integer, ByVal Starty As Integer, ByVal Endx As Integer, ByVal Endy As Integer, Optional ByVal size As Integer = 12, Optional ByVal name As String = "宋体", Optional ByVal color As Excel.Constants = Excel.Constants.xlAutomatic, Optional ByVal HorizontalAlignment As Excel.Constants = Excel.Constants.xlAutomatic.xlRight)
    '合并单元格
        Public Sub UniteCells(ByVal ws As Excel.Worksheet, ByVal Startx As Integer, ByVal Starty As Integer, ByVal Endx As Integer, ByVal Endy As Integer)参数说明 :ws:要设值的工作表 Startx 起始单元格的行 Starty 起始单元格的列 Endx 结束单元格的行 Endy 结束单元格的列 
    '将内存中数据表格插入到Excel指定工作表的指定位置   为在使用摩板时控制格式时使用
        Public Sub InsertTable(ByVal dt As Data.DataTable, ByVal ws As String, ByVal startX As Integer, ByVal startY As Integer)  Public Sub InsertTable(ByVal dt As Data.DataTable, ByVal ws As Excel.Worksheet, ByVal startX As Integer, ByVal startY As Integer)
      '将内存中数据表格添加到Excel指定工作表的指定位置
        Public Sub AddTable(ByVal dt As Data.DataTable, ByVal ws As String, ByVal startX As Integer, ByVal startY As Integer)
      Public Sub AddTable(ByVal dt As Data.DataTable, ByVal ws As Excel.Worksheet, ByVal startX As Integer, ByVal startY As Integer)  '插入图片操作"
     Sub InsertPictures(ByVal Filename As String, ByVal ws As String) Sub InsertPictures(ByVal Filename As String, ByVal ws As String, ByVal Height As Integer, ByVal Width As Integer) Sub InsertPictures(ByVal Filename As String, ByVal ws As String, ByVal left As Integer, ByVal top As Integer, ByVal Height As Integer, ByVal Width As Integer)
    插入图表操作"
        Public Sub InsertActiveChart(ByVal ChartType As Excel.XlChartType, ByVal ws As String, ByVal DataSourcesX1 As Integer, ByVal DataSourcesY1 As Integer, ByVal DataSourcesX2 As Integer, ByVal DataSourcesY2 As Integer, Optional ByVal ChartDataType As Excel.XlRowCol = Excel.XlRowCol.xlColumns)    参数说明 :ChartType 为图表类型 ws:要设值的工作表名 DataSourcesX1 图表数据源起始单元格的行 DataSourcesY1 图表数据源起始单元格的列 DataSourcesX2 图表数据源结束单元格的行 DataSourcesY2 图表数据源结束单元格的列  ChartDataType  图表数据数据方式    ' 保存文档
        Public Function Save() As Boolean    ' 文档另存为
        Public Function SaveAs(ByVal FileName) As Boolean' 关闭一个Excel对象,销毁对象
        Public Sub Close()这个一定要有!要不然 在系统进程中回有很EXCEL进程没有销毁!
    使用方法:引用:VBExcelWordEditor.dll   com引用: Microsoft Excel 10.0 Object Library
    暂时只做了这些功能,慢慢扩展 
      
      

  4.   

    参考msdnProgramming with Office:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wrcore/html/wroricodeexamplesforword.asp
      

  5.   

    http://blog.csdn.net/cocosoft/category/26609.aspx
      

  6.   

    C#中的受管代码和非受管代码   在.NET公用语言框架内运行的程序为受管代码。受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在.NET框架外运行的程序为非受管代码。比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。  Visual C#中调用Excel的COM组件  一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。  1、将Excel的COM组件转换为.NET组件  在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 9.0 Object Library"(Office 2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。  这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。  2、Visual C#打开Excel表格  事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。  在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:Excel.Application excel = new Excel.Application ();//引用Excel对象
    excel.Application.Workbooks.Add ( true );//引用Excel工作簿
    excel.Visible = true ;//使Excel可视   但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。  3、往Excel表格中输入数据  在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。Excel.Application excel = new Excel.Application () ;
    excel.Application.Workbooks.Add ( true ) ;
    excel.Cells[ 1 , 1 ] = "First Row First Column" ;
    excel.Cells[ 1 , 2 ] = "First Row Second Column" ;
    excel.Cells[ 2 , 1 ] = "Second Row First Column" ;
    excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;
    excel.Visible = true ;  4、实例  下面实例在C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel。string cnString="Provider=msdaora.1;Data source=Name; ";
    cnString=cnString+"user id=UserName;password=Password";
    try
    {
     OleDbConnection cn=new OleDbConnection (cnString);
     cn.Open ();
     try
     {
      string s="select * from Name.TableName";
      OleDbCommand cmd=new OleDbCommand (s,cn);
      OleDbDataReader dr=cmd.ExecuteReader ();
      Excel.Application xlApp = new Excel.Application();
      if(xlApp==null){MessageBox.Show ("Can't open Excel!");return;}
      xlApp.Application .Workbooks .Add (true);
      int row=2,fieldcount;
      fieldcount=dr.FieldCount ;
      for(int col=0;col<fieldcount;col++) xlApp.Cells [1,col+1]=dr.GetName(col);
      while (dr.Read ())
      {
       for(int col=0;col<fieldcount;col++) 
        xlApp.Cells [row,col+1]=dr.GetValue(col).ToString();
        row++;
      }
      xlApp.Visible =true;
      xlApp=null;
     }
     catch(Exception ex ){MessageBox.Show (ex.Message );}
     finally {cn.Close();}
    }
    catch(Exception ex){MessageBox.Show (ex.Message );}
    }
    }   5、安装一个使用COM组件的.NET程序  如果要将这样的程序安装运行在另一台机器上,那么除了安装运行程序外,还做三件事。  首先,是安装.NET运行系统。因为任何一个.NET程序都不能离开.NET运行系统去独立运行。  其次,所调用的COM组件必须要安装在目标机器上。本例中大多数目标机器上都装有Microsoft Office的Excel,一般不会有这个问题。但如果是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程序之前必须先安装好。  最后,转换后的.NET组件DLL文件要安装在目标机器上。因为.NET组件不需要在Windows Registry中注册,所以最简单的方法是将.NET组件DLL文件拷贝到运行程序目录下。如果此.NET组件被多个.NET程序共享,可以将其安装在.NET公用组件区中,从而可被任何一个.NET组件使用。只有当一个.NET组件参与了事务处理时,才需要将它注册为一个COM+组件。因为.NET仍然用传统的COM+机制来处理事务的提交、回滚等。  小结  通过以上讨论,我们知道了在C#中,如何使用Excel的COM组件。需要注意的是,Excel对象包含的许多内容我们没有介绍,在使用过程中需要我们不断学习。也使我们了解了在C#中如何使用COM组件。
      

  7.   

    http://community.csdn.net/Expert/topic/3430/3430753.xml?temp=.9537165
    建议你搜一下,有许多的
      

  8.   

    C#中的受管代码和非受管代码   在.NET公用语言框架内运行的程序为受管代码。受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在.NET框架外运行的程序为非受管代码。比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。  Visual C#中调用Excel的COM组件  一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。  1、将Excel的COM组件转换为.NET组件  在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 9.0 Object Library"(Office 2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。  这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。  2、Visual C#打开Excel表格  事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。  在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:Excel.Application excel = new Excel.Application ();//引用Excel对象
    excel.Application.Workbooks.Add ( true );//引用Excel工作簿
    excel.Visible = true ;//使Excel可视   但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。  3、往Excel表格中输入数据  在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。Excel.Application excel = new Excel.Application () ;
    excel.Application.Workbooks.Add ( true ) ;
    excel.Cells[ 1 , 1 ] = "First Row First Column" ;
    excel.Cells[ 1 , 2 ] = "First Row Second Column" ;
    excel.Cells[ 2 , 1 ] = "Second Row First Column" ;
    excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;
    excel.Visible = true ;  4、实例  下面实例在C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel。string cnString="Provider=msdaora.1;Data source=Name; ";
    cnString=cnString+"user id=UserName;password=Password";
    try
    {
     OleDbConnection cn=new OleDbConnection (cnString);
     cn.Open ();
     try
     {
      string s="select * from Name.TableName";
      OleDbCommand cmd=new OleDbCommand (s,cn);
      OleDbDataReader dr=cmd.ExecuteReader ();
      Excel.Application xlApp = new Excel.Application();
      if(xlApp==null){MessageBox.Show ("Can't open Excel!");return;}
      xlApp.Application .Workbooks .Add (true);
      int row=2,fieldcount;
      fieldcount=dr.FieldCount ;
      for(int col=0;col<fieldcount;col++) xlApp.Cells [1,col+1]=dr.GetName(col);
      while (dr.Read ())
      {
       for(int col=0;col<fieldcount;col++) 
        xlApp.Cells [row,col+1]=dr.GetValue(col).ToString();
        row++;
      }
      xlApp.Visible =true;
      xlApp=null;
     }
     catch(Exception ex ){MessageBox.Show (ex.Message );}
     finally {cn.Close();}
    }
    catch(Exception ex){MessageBox.Show (ex.Message );}
    }
    }   5、安装一个使用COM组件的.NET程序  如果要将这样的程序安装运行在另一台机器上,那么除了安装运行程序外,还做三件事。  首先,是安装.NET运行系统。因为任何一个.NET程序都不能离开.NET运行系统去独立运行。  其次,所调用的COM组件必须要安装在目标机器上。本例中大多数目标机器上都装有Microsoft Office的Excel,一般不会有这个问题。但如果是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程序之前必须先安装好。  最后,转换后的.NET组件DLL文件要安装在目标机器上。因为.NET组件不需要在Windows Registry中注册,所以最简单的方法是将.NET组件DLL文件拷贝到运行程序目录下。如果此.NET组件被多个.NET程序共享,可以将其安装在.NET公用组件区中,从而可被任何一个.NET组件使用。只有当一个.NET组件参与了事务处理时,才需要将它注册为一个COM+组件。因为.NET仍然用传统的COM+机制来处理事务的提交、回滚等。  小结  通过以上讨论,我们知道了在C#中,如何使用Excel的COM组件。需要注意的是,Excel对象包含的许多内容我们没有介绍,在使用过程中需要我们不断学习。也使我们了解了在C#中如何使用COM组件。顶 顶!!!