MFC中操作word和excel.doc
《MFC中操作word和excel.doc》由会员分享,可在线阅读,更多相关《MFC中操作word和excel.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-作者xxxx-日期xxxxMFC中操作word和excel【精品文档】应用程序运行界面如图所示:一、首先在VC6.0中创建MFC应用程序,类型为基本对话框,MFC库选静态的DLL(否则编译之后在其他电脑上无法运行),其他选项默认。然后按Ctrl+W调出MFC类向导,从Word和Exce的安装根目录下导入Word和Excel的库(word:MSWord.dll,Excel:excel.exe(选全部文件下拉列表才能看到),然后分别导入Word中的四个类( _Application,Documents,_Document,Range)和Excel中的五个类(_Application,Workbo
2、oks,Worksheets,_Workbook,_Worksheet,Range),注意导入Excel中的_Application和Range类时要重命名(_Application_Excel,Range_Excel),要不然和Word导入的类重名了。 /*/ /* 工程名为Nichole7 */ /*/二、首先在CNichole7App:InitInstance()中最前面加入: /*/ /* 初始化COM库 */ /*/ if (:CoInitialize(NULL) != S_OK) AfxMessageBox(初始化COM支持库失败!); exit(1); 然后在return FAL
3、SE前面加入:/*/ /* 释放COM库*/ /*/ :CoUninitialize();三、头文件#include msword.h /与Word操作相关的类#include excel.h /与Excel操作相关的类#include afxtempl.h /CMap类的头文件#include /新增加了一个头文件,为使用CComVariant替代VARIANT做准备/*2.添加excel的类时,要改名,要不然_Application和Range类会重定义(因为word里也会添加进有同样的类)*/#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FI
4、LEstatic char THIS_FILE = _FILE_;#endif#define LINE_SIZE 100 /Word行数(以换行符分隔)#define EXCEL_SIZE 50 /Excel的单元格数#define ITEM_COUNT 10 /歧义词最多项数BOOL InitWord(_Application &wordApp);BOOL InitExcel(_Application_Excel &_app);int Split(char *token,CString strs,CString *str,char *seps);void ExtractString(CMap
5、 &stringMap,CMap &ItemMap,const CString strs,/*const CString seps=:*/ const CString seps);BOOL OpenExcelFile(LPCTSTR xlsFileName,_Application_Excel &_app,LPDISPATCH &lpDispatch,Workbooks &_books,_Workbook &_book,Worksheets &_sheets);BOOL GetCurrentSheet(LPDISPATCH &lpDispatch,_Workbook &_book,_Works
6、heet &_sheet);int GetInsertPoint(LPDISPATCH &lpDispatch,_Workbook &_book,_Worksheet &_sheet,Range_Excel &_range);CString GetCellValue(LPDISPATCH &lpDispatch,_Workbook &_book,_Worksheet &_sheet,Range_Excel &_range,long row,long col);BOOL WriteExcel(CString strValue,LPDISPATCH &lpDispatch,_Workbook &_
7、book,_Worksheet &_sheet,Range_Excel &_range,long row,long col);void InitStringMap(CMap &stringMap);CString FindValue(CMap &stringMap,CString &key);void FindKeys(CMap &stringMap,CString *keys,CString &value);四、在Nichole7Dlg.cpp中加入如下代码:/*/* 主要的读取和写入过程都在此函数内完成,点击“写入Excel”按钮时调用*/*/void CNichole7Dlg:OnOK(
8、) / TODO: Add extra validation here CString wFileName,eFileName;/*/* m_wName,m_eName分别是两个编辑框的控件变量 */*/ m_wName.GetWindowText(wFileName); m_eName.GetWindowText(eFileName); if (wFileName.IsEmpty() AfxMessageBox(请选择Word文档!); else if (eFileName.IsEmpty() AfxMessageBox(请选择Excel文档!); else CFileFind finder
9、; BOOL bResult1,bResult2; bResult1=finder.FindFile(wFileName); bResult2=finder.FindFile(eFileName); if (!bResult1) AfxMessageBox(指定的Word文件不存在!); return; /return与exit(1)的不同,后者退出整个应用程序 else if (!bResult2) AfxMessageBox(指定的Excel文件不存在!); return; /定义变量 _Application wordApp; Documents docs; _Document doc;
10、 Range aRange; /操作Word COleVariant vTrue(short)TRUE),vFalse(short)FALSE),vOpt(long)DISP_E_PARAMNOTFOUND, VT_ERROR); if (InitWord(wordApp)=false) AfxMessageBox(初始化Word支持库失败!); exit(1); docs=wordApp.GetDocuments(); doc=docs.Open(COleVariant(wFileName),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,
11、vOpt,vOpt,vOpt,vOpt,vOpt,vOpt); aRange=doc.Range(vOpt,vOpt); /AfxMessageBox(aRange.GetText();/这里GetText得到的就是word文件的纯文本了,你可以将其写到txt文件中 CString strs=aRange.GetText(); /这里GetText得到的就是word的纯文本了,你可以将其写到txt文件中 char *token=NULL; CString strLINE_SIZE; char seps=r; /不能用n,不知为何? int line_size=Split(token/*需要初始
12、化*/,strs,str,seps); CMap stringMap; CMap ItemMap; /保存从Word返回的键-值对 InitStringMap(stringMap); const CString stops=:; for (int i=0/*退出for循环时,i仍然存在*/; iline_size; i+) ExtractString(stringMap,ItemMap,stri,stops); aRange.ReleaseDispatch(); doc.ReleaseDispatch(); docs.ReleaseDispatch(); VARIANT SaveChanges
13、,OriginalFormat,RouteDocument; /定义调用QUIT时使用的参数 SaveChanges.vt=VT_BOOL; /设置退出WORD时候的保存参数 SaveChanges.boolVal=VARIANT_FALSE; /为不保存任何文档,模板及设置 :VariantInit(&OriginalFormat); /清空变量 RouteDocument.vt=VT_EMPTY; /清空变量的另一种方法 /*/ /* 采用注释掉的方法会出现:vc调用并关闭word时,提示“此文件正由另一个应用程序或用户使用” * 解决办法是将wordApp.Quit()里的三个参数更改一
14、下 */ /*/ /wordApp.Quit(vOpt,vOpt,vOpt); wordApp.Quit(&SaveChanges,&OriginalFormat,&RouteDocument); wordApp.ReleaseDispatch(); /定义变量 _Application_Excel _app; Workbooks _books; Worksheets _sheets; _Workbook _book; _Worksheet _sheet; Range_Excel _range; LPDISPATCH lpDispatch; /操作Excel if (InitExcel(_ap
15、p)=false) AfxMessageBox(初始化Excel支持库失败!); exit(1); /打开Excel文件 if (!OpenExcelFile(eFileName,_app,lpDispatch,_books,_book,_sheets) AfxMessageBox(打开Excel失败!); exit(1); /得到第一行的值,保存在strArray0.j-2中 CString strArrayEXCEL_SIZE; CString strTemp; for (int j=1;j+) strTemp=GetCellValue(lpDispatch,_book,_sheet,_r
16、ange,1,j); strTemp.TrimLeft(); strTemp.TrimRight(); if (strTemp.GetLength()=0) break; else strArrayj-1=strTemp; /得到写入Excel的位置 int insertPoint=GetInsertPoint(lpDispatch,_book,_sheet,_range); /将Word中读出的内容写入Excel指定开始位置 CString strMap; for (int k=0;k=j-2;k+) CString strValue; strMap=strArrayk; ItemMap.L
17、ookup(LPCTSTR)strMap,strValue/*保存返回值*/); strValue.TrimLeft(); strValue.TrimRight(); WriteExcel(strValue,lpDispatch,_book,_sheet,_range,insertPoint,k+1); /_book.SaveCopyAs(COleVariant(D:1.xls); /相当于另存为 /相当于excel菜单的保存 COleVariant covOptional(LONG)DISP_E_PARAMNOTFOUND,VT_ERROR); /_book.SetSaved(true);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 操作 word excel
限制150内