VC操作Excel

基于MFC的OLE编程方法

一、Excel的对象模型

    Application:代表应用程序本身。即Excel应用程序
    Workbooks:是Workbook 的集合,代表了工作薄。
    Worksheets:是Worksheet的集合,是Workbook的子对象。
    Range:是Worksheet的子对象,可以理解为Sheet中一定范围的单元格。
    Shapes:是Worksheet的子对象,用于存储图片等信息的单元格。

二、VC操作Excel的初始化过程

1、导入Excel库文件 
   首先打开Class Wizard,点击"Add class"按钮下的"From a type Library"导入 office安装目录下的"excel.exe"
  (适用于Excel2003),然后选择需要用的一些类,比如_Application, _Workbook,Workbooks,Worksheets,_Wroksheet,Range,Shapes等。点击确定后,系统会在你的程序目录下生成excel.h和excel.cpp两个文件,在要使用这些导入的类时加入#include "Excel.h"即可。

2、初始化Application
   首先, 初始化COM组件
    
   if(!AfxOleInit())      
   {          
       AfxMessageBox("无法初始化COM的动态连接库");      
   }
    
   然后,创建Excel 服务器(启动Excel)
   
   if (!app.CreateDispatch("Excel.Application"))      
   {          
       AfxMessageBox("无法启动Excel服务器");       
   }
   
   定义app的全局或成员变量 _Application app;   
   
   3、设置Excel的状态
   app.SetVisible( TRUE ); //使Excel可见   
   app.SetUserControl( TRUE ); //允许其他用户控制Excel
 

三、VC对Excel的操作   

定义变量

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


1、打开已有的Excel文件


2、新建一个.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"));                      //添加数据


3、合并单元格

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

5、将已建的.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);  


6、关闭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

出处:http://blog.csdn.net/handsing/archive/2010/04/08/5461070.aspx

猜你喜欢

转载自blog.csdn.net/guo0625/article/details/16944409