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()里
在ExcelTestDlg.cpp文件的头部,#include "ExcelTestDlg.h "语句之下,
增加 :
#include "Excel9.h "
4.
ExcelTestDlg.cpp文件中需要加的地方加上
-
_Application app; -
Workbooks books; -
_Workbook book; -
Worksheets sheets; -
_Worksheet sheet; -
-
LPDISPATCH lpDisp; -
-
Range range; -
Font font; -
Range cols; -
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); -
-
if(!app.CreateDispatch("Excel.Application")) -
{ -
AfxMessageBox("无法启动Excel服务器!"); -
return; -
} -
-
/ -
-
Range usedRange; -
usedRange.AttachDispatch(sheet.GetUsedRange()); -
range.AttachDispatch(usedRange.GetRows()); -
long iRowNum=range.GetCount(); //已经使用的行数 -
- range.AttachDispatch(sheet.GetCells(),true);
//得到所有元素 -
//****************** -
CString a; -
a.Format("%d",iRowNum); - //
AfxMessageBox(a); -
-
range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)1),COleVariant("fuck1")); -
range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)2),COleVariant("fuck1")); -
range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)3),COleVariant("fuck1")); -
range.SetItem(COleVariant((long)(iRowNum+1)),COleVariant((long)4),COleVariant("fuck1")); -
-
book.Save(); -
-
book.Close(covOptional,COleVariant("C:\\\\1.xls"),covOptional); -
books.Close(); -
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中是写,读取时如下
- _Application
app,pApp; - pApp.AttachDispatch(range.GetItem(COleVariant((long)(iRowNum)),COleVariant((long)(1))).pdispVal,true);
- CString
b; - b=pApp.GetValue();
- AfxMessageBox(b);