zoukankan      html  css  js  c++  java
  • VC编程操作Excel

    1.

    建立VC工程,本章说明一般是针对MFC

    2.

    加入Excel的库文件.

    从classwizard中add class处from type library,去office的安装目录下引入excel.exe(这是office 2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着excel文件的一个个部分,加载库后会自动生成相应的接口头文件和源文件

    Excel的对象模型        

    Application:代表应用程序本身。即Excel应用程序        

    Workbooks:是Workbook 的集合,代表了工作薄。        

    Worksheets:是Worksheet的集合,是Workbook的子对象。        

    Range:是Worksheet的子对象,可以理解为Sheet中一定范围的单元格。        

    Shapes:是Worksheet的子对象,用于存储图片等信息的单元格

    3.

    初始化COM库.

    在app的Initstance函数中添加始化代码:

    4.

    if(!AfxOleInit()) 
    {
        AfxMessageBox("无法初始化COM的动态连接库!");
        return FALSE;
     }

    不过在控制台程序中调用AfxOleInit()是无效的;

    然后,创建Excel 服务器(启动Excel)

    定义app的全局或成员变量

    _Application app;
    
    if (!app.CreateDispatch("Excel.Application"))
    {
       AfxMessageBox("无法启动Excel服务器");
       return FALSE;
    }

    设置Excel的状态:

    5.

    app.SetVisible(bVisble); // 使Excel可见
    app.SetUserControl(bControl); // 允许其他用户控制Excel

    VC对Excel的操作

    定义变量

    Workbooks  books;
    _Workbook  book;
    Worksheets  sheets;
    _Worksheet  sheet;
    LPDISPATCH  lpDisp;
    Range   range;
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

    6.

    打开已有的Excel文件

    books.AttachDispatch(app.GetWorkbooks());
       // 或者也可以
       // books = app.GetWorkbooks();
      lpDisp = books.Open("", covOptional, covOptional,  covOptional,   covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,
    covOptional, covOptional, covOptional, covOptional);

    7.

    新建一个.xls文件,并写入数据

    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
     
            // Get the Workbooks collection so that you can add a new workbook
                books.AttachDispatch(app.GetWorkbooks());  // 得到Workbooks
            book = books.Add(covOptional);     // 得到Workbook
     
          // Get the Worksheets collection so that you can get the IDispatch for the first Worksheet
           sheets = book.GetWorksheets();     // 得到Worksheets
           sheet = sheets.GetItem(COleVariant((short)1)); // 得到Worksheet
           
           // 分别向每个单元格添加数据
           // Excel2000 用函数SetValue()即可, Excel2003用函数SetValue2()
          //
          range  = sheet.GetRange(COleVariant("A1"), covOptional);  // 获取A1 Range
          range.SetValue2( COleVariant("Date"));                               // 添加数据
     
         range = sheet.GetRange(COleVariant("B1"), covOptional);   // 获取B1 Range
         range.SetValue2(COleVariant("Order"));                               // 添加数据
         range = sheet.GetRange(COleVariant("C1"), covOptional);   // 获取C1 Range
         range.SetValue2(COleVariant("Amount"));                            // 添加数据
         range = sheet.GetRange(COleVariant("D1"), covOptional);   // 获取D1 Range
         range.SetValue2(COleVariant("Tax"));                                   // 添加数据
        
           // 向单元格中添加公式
        range = sheet.GetRange(COleVariant("D2"), covOptional);      // 获得D2 Range 
        range = range.GetResize(COleVariant((long)NUMROWS), COleVariant((long)1)); // 重新设置D2的大小
        range.SetFormula(COleVariant("=C2*0.07"));                         // 给D2:D21设置公式
     
          // 设置单元格的格式
          range = sheet.GetRange(COleVariant("A1"), COleVariant("D1")); // 获得A1:D1的Range
          oFont = range.GetFont();                                                              // 获得Range的字体
          oFont.SetBold(COleVariant((short)TRUE));                                    // 设置是否粗体
          oFont.SetColor(COleVariant((long)RGB(255, 0, 0)));                     // 设置字体颜色
          oFont.SetName(COleVariant("黑体"));                                           // 设置字体类型
         rang.SetNumberFormatLocal(COleVariant("@"));     //设置单元格为文本,赋值前有效
          range = range.GetEntireColumn();                                                // 获得全部的单元格
          range.AutoFit();                                                                            // 自动适合尺寸

    8.

    合并单元格

    // 思路:1.先获取A1:C1的Range范围,然后重新定义此范围,最后合并
          //          2.直接获得A1:C2的Range范围,直接合并。结果和第一种方法一样
            Range unionRange;
           unionRange = sheet.GetRange(COleVariant("A1"), COleVariant("C1")); 
           vResult = unionRange.GetMergeCells();
            unionRange = unionRange.GetResize(COleVariant((long)2), COleVariant((long)3));
            unionRange.Merge(COleVariant((long)0));      //合并单元格
            unionRange.SetRowHeight(COleVariant((short)30));   //设置单元格的高度
            unionRange.SetHorizontalAlignment(COleVariant((long)-4108));// 水平居中对齐 

    9.

    向单元格中插入图片(支持BMP、JPG格式,其他没试)

    Shapes   shapes   =   sheet.GetShapes();       // 从Sheet对象上获得一个Shapes    
        range   = sheet.GetRange(COleVariant("B16"),COleVariant("J22"));    // 获得Range对象,用来插入图片
            
       rgMyRge1 = range;
       shapes.AddPicture("D://Test1.jpg"   ,   false   ,   true   ,   
                                      (float)range .GetLeft().dblVal, (float)range .GetTop().dblVal,     // 从本地添加一个图片
                                      (float)range .GetWidth().dblVal, (float)range .GetHeight().dblVal);
       ShapeRange   sRange   =   shapes.GetRange(_variant_t(long(1)));
       sRange.SetHeight(float(30));   
       sRange.SetWidth(float(30)); 

    10.

    将已建的.xls文件另存为

    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
        book.SaveAs(COleVariant("D://3.xls"),covOptional,covOptional,
                                    covOptional,covOptional,covOptional,0,
                                    covOptional,covOptional,covOptional,covOptional,covOptional); 

    11.

    关闭Excel服务

    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
        book.SetSaved(TRUE);     // 将Workbook的保存状态设置为已保存,即不让系统提示是否人工保存
        range.ReleaseDispatch();    // 释放Range对象
        sheet.ReleaseDispatch();    // 释放Sheet对象
        sheets.ReleaseDispatch();    // 释放Sheets对象
     
        book.ReleaseDispatch();     // 释放Workbook对象
        books.ReleaseDispatch();    // 释放Workbooks对象
        book.Close (covOptional, covOptional,covOptional);// 关闭Workbook对象
        books.Close();           // 关闭Workbooks对象
        
        app.Quit();          // 退出_Application
        app.ReleaseDispatch ();       // 释放_Application
  • 相关阅读:
    龙芯地址空间详解
    JS匿名函数 Amy
    JS正则表达式 Amy
    JS对象 Amy
    Java 位图法排序
    Java Final
    JAVA 数组
    Java shuffle 算法
    jQuery object and DOM element
    Javascript 声明时用“var”跟不用"var"的区别
  • 原文地址:https://www.cnblogs.com/guobbs/p/3549404.html
Copyright © 2011-2022 走看看