• C# 操作Excel 1


    C# 操作Excel的方法有多种方法,扼要概述一下:

    1.只要安装了微软的Office就可以通过C# 代码操作Excel,下面介绍一下:

    Excel对象
      微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。
      (1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
      (2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
      (3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。
      (4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。

     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组件。
      参考文献:
      [1] 刘洪成 C#高级编程 清华大学出版社 2003.7工作 187~200

    Excel操作属性

    1、 显示当前窗口:ExcelApp.Visible := True;
    2、 更改 Excel 标题栏:ExcelApp.Caption := '标题内容';
    3、 添加新工作簿:ExcelApp.WorkBooks.Add;
    4、 设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;
    5、 给单元格赋值:ExcelApp.Cells[1,1].Value := '第一行第一列';
    6、 设置指定列的宽度(单位:字符个数),以第一列为例:
    ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;
    7、 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
    ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
    8、文字水平居中:Excelid.worksheets[1].Rows[1].HorizontalAlignment := $FFFFEFF4;
      文字垂直居中:Excelid.worksheets[1].Rows[1].VerticalAlignment := $FFFFEFF4;
    9、 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert;
    b. ExcelApp.ActiveSheet.Columns[1].Insert;
    10、 删除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete;
    b. ExcelApp.ActiveSheet.Columns[1].Delete;  
    11、合并单元格:ExcelApp.worksheets[1].range[A1:F8'].Merge(abc);注:要声明变量abc: Variant;
    12、竖行显示文字:ExcelApp.worksheets[1].Cells.Item[1,1].Orientation:= xlVertical;
    13、单元格加边线:ExcelApp.worksheets[1].Range[A1:F8].Borders.LineStyle := 1;
    14、在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;
    15、在第4列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;
    16、指定边框线宽度:ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
    1-左    2-右   3-顶    4-底   5-斜( )     6-斜( / )
    17、拷贝操作:a.拷贝整个工作表:ExcelApplication1.ActiveSheet.Used.Range.Copy;
    b.拷贝指定区域:ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;
                     c.从A1位置开始粘贴:ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
    d.从文件尾部开始粘贴:ExcelApplication1.ActiveSheet.Range.PasteSpecial;
    18、清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;
    19、工作表保存:if not ExcelApp.ActiveWorkBook.Saved then
                   ExcelApp.ActiveSheet.PrintPreview;
    20、工作表另存为:ExcelApp.SaveAs( 'C:ExcelDemo1.xls' );
    21、放弃存盘:ExcelApp.ActiveWorkBook.Saved := True;
    22、关闭工作簿:ExcelApp.WorkBooks.Close;
    23、退出 Excel:ExcelApp.Quit;
    下面是有关打印页面控制的语句:
       24、设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
    ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;
    ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
    ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;
    ExcelApp.ActiveSheet.Rows[1].Font.size:=10;
    25、进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
    b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '共&N页 第&P页';
                         c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
    d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
                         e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
    f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
                         g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
    h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
                         i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
    j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
                         k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;
    26、打印预览工作表:ExcelApp.ActiveSheet.PrintPreview;
    27、打印输出工作表:ExcelApp.ActiveSheet.PrintOut;
    对Excel的其他控制:
    28、excel的多单元格合计功能:ExcelApp..Cells[ARow, ACol].Formula
    := '= SUM($+IntToStr(BeginRow) +:$ + IntToStr(EndRow) +');
    注:声明变量ARow, ACol: Integer;
    29、打开已经存在的Excel文件: ExcelApplication1.Workbooks.Open (c:a.xls
    EmptyParam,EmptyParam,EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,EmptyParam,EmptyParam,
       EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);

  • 相关阅读:
    【Java123】JDBC数据库连接池建立
    【招聘123】Some good open positions
    [Java123]Gradle
    4_3:流程控制:循环练习
    4_3:流程控制:while + do while + continue + break
    4_2:流程控制:[ for循环 ] + 断点调试
    4_1:流程控制:分支结构:[ if else ] + [ 三元表达式 ] + [ switch case ]
    3:运算符 + 运算符优先级 [ 逻辑短路 ]
    2_3:变量:[ 类型之间转换 ]
    2_2:变量:[ 五种简单数据类型 ]
  • 原文地址:https://www.cnblogs.com/yunfeiqi/p/3441814.html
Copyright © 2020-2023  润新知