A:
从classwizard中addclass处from typelibrary,去office的安装目录下引入excel.exe(这是office2003的选择,其他版本都是用olb文件),
服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着excel文件的一个个部分,
常用的有这几个_application,workbooks,_workbook,worksheets,_worksheet,Range,
它们分别代表不同的意义.
_application代表了EXCEL服务器,
workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks),
_workbook就是一个表,相当于MDI中的一个视窗,
worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets),
_worksheet就表示一个表单,
range表示元素的集合.搞清楚上面这几个名词的意思非常重要.
B,在dlg.h中声明下面几个变量:
_Applicationexlapp; //组件服务器的各个classes _Workbook wbk; Workbooks wbks; _Worksheet wht; Worksheets whts; LPDISPATCH lpDisp;
AfxInitOle(); AfxEnableControlContainer();
下面是"显示"按钮的代码:
//创建Excel服务器 if(!exlapp.CreateDispatch("Excel.Application")) { AfxMessageBox("无法启动Excel服务器!"); return; } COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR); exlapp.SetVisible(TRUE);//使Excel可见 exlapp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝. //Open an excel file char path[MAX_PATH]; GetCurrentDirectory(MAX_PATH,path); CString strPath = path; strPath += "\\VCOpExcel"; wbks.AttachDispatch(exlapp.GetWorkbooks()); lpDisp=wbks.Open(strPath, avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); wbks.ReleaseDispatch(); exlapp.ReleaseDispatch();
D,与上面第一种方法一样,可以插入记录:
UpdateData(); //读入数据 if (""==m_name) //判断名字输入有效 { MessageBox("Please input a right name"); return; } if (0>=m_age||100<=m_age) //判断年龄输入有效 { MessageBox("Please input a right age"); return; } char *p=strupr(_strdup(m_gener)); if (strcmp(p,"FEMALE")&&strcmp(p,"MALE")) //判断性别输入有效 { MessageBox("Please input a right gener"); return; } Range range; Range usedRange; COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR); if(!exlapp.CreateDispatch("Excel.Application")) //启动服务器 { AfxMessageBox("无法启动Excel服务器!"); return; } char path[MAX_PATH]; GetCurrentDirectory(MAX_PATH,path); CString strPath = path; strPath += "\\VCOpExcel"; wbks.AttachDispatch(exlapp.GetWorkbooks()); lpDisp=wbks.Open(strPath, //初始化. avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); wbk.AttachDispatch(lpDisp); whts.AttachDispatch(wbk.GetWorksheets()); lpDisp=wbk.GetActiveSheet(); wht.AttachDispatch(lpDisp); usedRange.AttachDispatch(wht.GetUsedRange()); range.AttachDispatch(usedRange.GetRows()); long iRowNum=range.GetCount();//已经使用的行数 range.AttachDispatch(wht.GetCells()); range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),COleVariant(m_name)); range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVariant(m_age)); range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant(m_gener)); wbk.Save(); wbk.Close(avar,COleVariant(strPath),avar); wbks.Close(); exlapp.Quit();