zoukankan      html  css  js  c++  java
  • .NET操作Excel表格的整理

       首先需要引用一个COM引用: Microsoft Excel 11.0 Object Library. 在程序代码中添加命名空间Microsoft.Office.Interop.Excel的引用. 然后就可以跟Excel进行操作了.

    基本的Excel对象

    Application: 每个Application对象表示一个Excel程序, 在程序中每创建一个该对象就启动Excel程序的一个实例
    Workbook: 每个Workbook对象表示一个Excel工作薄, 在同一个Excel程序中可以打开多个工作薄
    Worksheet: 每个Worksheet对象表示一个Excle工作表, 在同一个Excel工作薄中可以打开多个工作表
    Range: 每个Range对象表示Excel工作表上的一个区域, 该区域可以是一个单元格, 也可以是多个单元格的组合. 区域可以是连续的, 也可以是离散的

    简单的代码实现对Excel的操作

     
    1
    2
    3
    4
    5
    6
    7
    8
    private void button1_click(object sender, EventArgs e)
    {
       Microsoft.Office.Interop.Excel.Application app1 = new Microsoft.Office.Interop.Excel.Application();
       app1.visible = true;
       Workbook book1 = app1.Workbooks.Add(Type.Missing);
       Wroksheet sheet1 = (Worksheet)book1.Sheets[1];
       Range rng1 = sheet1.get_Range("A1", Type.Missing);
       rng.Value2 = "hello";
    }

            这样点击按钮之后就会发现新建了一个Excel, 这个Excel里有一个表格, 在A1的单元格里显示文本hello.

     
    Workbook book1 = app1.Workbooks.Add(Type.Missing);

            除了Add这个方法外, 如果想打开一个已经存在的表格, 并对它进行操作, 可以使用Open方法.

            获取区域值的方法, 返回的是一个Object类型的数组:

     
    1
    2
    3
    4
    5
    6
    sheet1.get_Range("B2", Type.Missing);  //返回B2单元格
    sheet1.get_Range("A1:C10", Type.Missing);  //返回左上角A1到右下角C10区域单元格
    sheet1.get_Range("A1", "C10);  //和上一行效果一样(左上角A1到右下角C10区域单元格)
    sheet1.get_Range("A:A", Type.Missing);  //返回整个A列
    sheet1.get_Range("A:C", Type.Missing);  //返回A到C列
    sheet1.get_Range("3:3", Type.Missing);  //返回A到C列
    sheet1.get_Range("A1:A5, C1:C5", Type.Missing);  //返回两个独立的区域

            除了获取一个区域的值, 获得单个单元格值的方法:

     
    1
    2
    Range rng1 = (Range)sheet1.Cells[1, 1];   //获取A1单元格
    Range rng2 = (Range)sheet1.Cells[3, "C];   //获取C3单元格
    Range rng3 = (Range)sheet1.Cells[2, Type.Missing];   //获取B1单元格

            Range对象除了Value2属性, 还有Value属性, 只有当涉及日期和货币格式才使用这个属性. 否则, 为保持程序简洁和一致性, 应该使用Value2属性.

            Range对象还有个只读属性: Text, 该属性虽然是Object类型的, 但所有值类型都是按文本方式进行处理的. 所以在使用这个Text属性时, 如果已经确定这个文本的数据类型时, 可以使用Parse方法把文本转变成该数据类型. 如果不能确定, 则可以使用TryParse方法.

            除此之外, Range对象中如果某个或某些单元格的值全为数字, 而我们不想按数字来处理这些值, 想把它转变成文本或是其它格式. 可以使用Range的NumberFormat属性.

            操作Excel表格, 还有个专门的控件叫做SpreedSheet控件, 不过在我做东西的时候, 想把日期格式的数据正确显示在这个控件中出现了不少问题, 最后还是舍弃了使用这个控件. 最后还是选择了比较常见的DataGridView -_-

    更多资料:http://support.microsoft.com/kb/302084/en-us

    微软新闻组中,看到了吉日嘎拉的一个帖子,询问如何能将用户照片放入Excel。
      我以为应该很简单,于是先录制了一个宏,得到的结果是:
      ActiveSheet.Pictures.Insert("D:\tt.bmp").Select 
       然而,在C#中,WorkSheet类似乎并不直接支持Pictures.Insert这样的方法。而在MSDN
      网站上,几篇Office开发文档介绍的也只是常见的Application、WorkBook、Sheet这些对
      象如何读写。最后,还是看了VBA的帮助,才找到了解决的办法,也仍然非常简单:
        Excel.Worksheet xSheet=(   Excel.Worksheet)xBook.Sheets[1];  
      xSheet.Shapes.AddPicture("D:\\tt.bmp", MsoTriState.msoFalse  , 
      MsoTriState.msoTrue,10,10,150,150);    
        就可以了。其中,第二、三个参数分别表示是否链接到文件、是否在文档中保存图片
      信息(还是只保存链接信息)。

    错误方法: sh.get_Range( sh.Cells[1,1], sh.Cells[1,1]); // fails (my original code) 正确方法 if (workSheet != null) {    range = workSheet.get_Range(workSheet.Cells[beginRowIndex, beginColumnIndex] as Excel.Range, workSheet.Cells[endRowIndex, endColumnIndex] as Excel.Range);//需要加上 as Excel.Range    range.ColumnWidth = width; }
  • 相关阅读:
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    适合 C++ 新手学习的开源项目——在 GitHub 学编程
    【9303】平面分割
    【u114】旅行计划(12月你好)
    【u236】火炬
    【u233】单词化简
    Java Web整合开发(41) -- Forum
    1、服务器(软件)种类
    jquery trigger
    jQuery实现当按下回车键时绑定点击事件
  • 原文地址:https://www.cnblogs.com/gyxdbk/p/3137183.html
Copyright © 2011-2022 走看看