许华升的老婆照片:VC++利用Automation操作word, excel - David的专栏 - CS...

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 22:55:26
VC++利用Automation操作word, excel 收藏
 关于VC操作word和EXCEL的,其中有网上抄的资料,也有自己的理解和体会。
1. 一般来说,VC操作word和EXCEL比较直接的方式是利用automation. 翻译成中文就是自动化。你要做的第一件事情就是为你的工程添加操作word和EXCEL需要的头文件。方法如下:
   对于VC6.0来说,打开class wizard, 然后选中automation,弹出以下界面:
  
 
点击 "Add Class"按钮,会出现一个下拉菜单,只有2项,然后选择"from a type lib",此时弹出一个对话框,提示输入typelib文件。
这些文件一般在你office的安装目录下,名字是msword.olb,选中后点OK, 就出现下面的对话框: 选择所有的类,然后点击ok,这样你就生成了需要的两个文件msword.h和msword.cpp.(名字可以修改)。
关于EXCEL,方法类似。
利用automation对word和excel的操作是类似的。类的结构如下:
    Application  // 代表程序
           Workbooks  // 代表word所有文档
                Workbook  // 单个word文档
                    ......             Worksheets // 代表excel表的集合
             Worksheet //代表单个表
                    ......              Range  //活动区域
            Cells / cell  单元格            Rows /row   行            Columns / column  列            Tables / table  表            Bookmarks / bookmark 标签            saveas  另存为            printout 打印剩下的就不多讲了,直接给代码吧。关于word的: CoInitialize(NULL);  // 初始化com组件,必须的  _Application wordApp;  if (!wordApp.CreateDispatch("Word.Application"))  //将wordApp链接到word应用程序  {     CoUninitialize();     return FALSE;  }  ...   Documents docs = wordApp.GetDocuments(); // 获得word的文档集  _Document doc;  COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);  COleVariant vtTrue((short)TRUE), vtFalse((short)FALSE);  CString filename; //要打开的文件名字  if(Filename.Find(".dot",0) > 0)  // 如果是后缀是.dot,表明为一个word模板  {    // add the template to the word      COleVariant covFileName;     covFileName.vt = VT_BSTR;     covFileName.bstrVal = ReportFilename.AllocSysString();     doc = docs.Add(covFileName,vtOptional,vtOptional,vtOptional);  // 调用add  }   else  {    // 如果是一个.doc普通文档,新建一个新的文档,然后把这个文件添加进去    doc = docs.Add(vtOptional,vtOptional,vtOptional,vtOptional);     // the selection will be released automatically.    Selection oSelection;      oSelection = wordApp.GetSelection();   //插入一个文件      oSelection.InsertFile(Filename.GetBuffer(ReportFilename.GetLength()),vtOptional,vtOptional,vtOptional,vtOptional);    Filename.ReleaseBuffer();    oSelection.DetachDispatch();  }当然,你也可以直接用open来打开一个文件。有对应的open方法。取得word的版本号。 2000对应9.0, 2002对应10.0, 2003对应11.0,2007对应12.0CString sVersion = wordApp.GetVersion();  COleVariant  tablebookmarkname(bookmarkName); //取得word的标签 Bookmarks wordbookmarks = doc.GetBookmarks(); //根据标签名取得指定标签 Bookmark  wordbookmark;    wordbookmark = wordbookmarks.Item(tablebookmarkname); //取得区域 Range range ; range = wordbookmark.GetRange(); // 取得区域相连的表 Tables ts = range.GetTables();   Table  t = ts.Item(1);         Rows rows = t.GetRows(); Row row = rows.Item(1); // the index is starts 1, ,2... Cells cells = row.GetCells();   int colcount = cells.GetCount(); Cell cell = t.Cell(2, k+1); range = cell.GetRange(); CString inh = range.GetText(); row = rows.Add(vtOptional);//设置文字 range.SetText(inhnew);保存文件,注意版本不同,有可能导致接口不同。COleVariant savefilename, fileformat;if(sVersion == "9.0"){             doc.SaveAs9(savefilename, vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,                     vtOptional,vtOptional,vtOptional,vtOptional); } else if(sVersion == "10.0"){        doc.SaveAs(&vNeuerName,& vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,                    vtOptional,vtOptional,vtOptional,vtOptional,vtOptional, vtOptional,vtOptional,vtOptional,vtOptional); }  else if(sVersion == "11.0") {          doc.SaveAs(&vNeuerName,& vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,                    vtOptional,vtOptional,vtOptional,vtOptional,vtOptional, vtOptional,vtOptional,vtOptional,vtOptional); }//打印文件           doc.PrintOut(vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional,vtOptional);          退出:  wordApp.Quit(vtOptional,vtOptional,vtOptional);    也可以用shellexcute打开和打印一个word文件。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bichenggui/archive/2009/09/24/4589804.aspx