MFC----MFC添加excel类库ole库,执行简单读写

来源:互联网 发布:cdn域名加速 编辑:程序博客网 时间:2024/04/28 10:14

mfc操作excel方法一般有两种,一种是用odbc操作,另一种就是本文的加入excel类库操作

1.   
选择Menu-> View-> ClassWizade,打开ClassWizade窗口,在Automation中,选择Add Class-> From a type library,选择D:\Program Files\Microsoft Office\office\Excel.exe(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,(个人一般是全部都加上,因为不知道哪个有啥用微笑)分别为_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,头文件Excel9.h,源文件Excel9.cpp。   
2.InitInstance()里
  if(!AfxOleInit())
 {
  AfxMessageBox("初始化OLE出错!");
  return FALSE;
 }

 3.
在ExcelTestDlg.cpp文件的头部,#include "ExcelTestDlg.h "语句之下,

增加 :   
#include "Excel9.h "   (看你导入后生成头文件是啥,我之前导07 ,就是Excel.h)

4.

ExcelTestDlg.cpp文件中需要加的地方加上

[cpp] view plaincopy
  1.     _Application app;      
  2.     Workbooks books;  
  3.     _Workbook book;  
  4.     Worksheets sheets;  
  5.     _Worksheet sheet;  
  6.   
  7.     LPDISPATCH lpDisp;      
  8.   
  9.     Range range;  
  10.     Font font;  
  11.     Range cols;  
  12.     COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);  
  13.       
  14.     if(!app.CreateDispatch("Excel.Application"))   
  15.      
  16.         AfxMessageBox("无法启动Excel服务器!");  
  17.         return 
  18.      
  19.           
  20.          
  21.       
  22.     Range usedRange;  
  23.     usedRange.AttachDispatch(sheet.GetUsedRange());  
  24.     range.AttachDispatch(usedRange.GetRows());  
  25.     long iRowNum=range.GetCount();                   //已经使用的行数  
  26.       
  27. range.AttachDispatch(sheet.GetCells(),true);   //得到所有元素  
  28.     //******************  
  29.     CString a;  
  30.     a.Format("%d",iRowNum);  
  31. //  AfxMessageBox(a);  
  32.   
  33.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)1),COleVariant("fuck1"));  
  34.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)2),COleVariant("fuck1"));  
  35.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)3),COleVariant("fuck1"));  
  36.         range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)4),COleVariant("fuck1"));  
  37.   
  38.         book.Save();  
  39.   
  40.         book.Close(covOptional,COleVariant("C:\\\\1.xls"),covOptional);  
  41.  books.Close();        
  42.  app.Quit();   


我在c盘建了个1.xls

备注:使用vc6.0 excel 03没问题,使用excel 07 时也可以就是类导入的位置不一样,在D:\Program Files\Microsoft Office\Office12中,直接导excel.exe就行了,然后在c盘建个表格,保存为97-03兼容模式就ok了

5.

4中是写,读取时如下

 

[cpp] view plaincopy
  1. _Application app,pApp;  
  2. pApp.AttachDispatch(range.GetItem(COleVariant((long)(iRowNum)),COleVariant((long)(1))).pdispVal,true);  
  3. CString b;  
  4. b=pApp.GetValue();  
  5. AfxMessageBox(b);  
0 0
原创粉丝点击