vc操作msword

每隔一二年就要用一次 WORD 或其它 MSOffice 组件,好多次了,每次都忘的一干二净,从头google,这次又要用,顺便记下来,以备不时之需,同时分享给大家。开发环境 WIN7-X64, VC2010, MSOffice2010。

1. 在VC2010项目名称上右击,选择类向导...


2.在右上角的添加类中选择“类库中的MFC类”

3. 在新对话框中选择文件,点击右边的“...”按钮,按图示选择MSWORD.OLD文件。

4. 按需要选择一些常用的类,完成

5. 把新生成的 .h 文件顶部的 #import "E:\\TTMv8\\Debug\\MSWORD.OLB" no_namespace 这一行注释掉,否则编译时会出现一大堆错误,网上有别的解决办法,我觉得注掉这个办法最好。出现的错误代码如下:

//#import "E:\\TTMv8\\Debug\\MSWORD.OLB" no_namespace
/* 编译时出一大堆错,把上面这一句注消就好了!!!!!!!,可能还能保证各word版本的兼容性
1>e:\ttmv8\ttmv8\capplication.h(3): warning C4278: “ExitWindows”: 类型库“E:\\TTMv8\\Debug\\MSWORD.OLB”中的标识符已经是宏;使用“rename”限定符
1>e:\ttmv8\ttmv8\capplication.h(3): error C2872: “Font”: 不明确的符号
1>          可能是“c:\program files (x86)\microsoft visual studio 10.0\vc\include\comdef.h(312) : Font”
1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(244) : Gdiplus::Font”
1>e:\ttmv8\ttmv8\capplication.h(3): error C2872: “Font”: 不明确的符号
1>          可能是“c:\program files (x86)\microsoft visual studio 10.0\vc\include\comdef.h(312) : Font”
1>          或       “c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(244) : Gdiplus::Font”
*/

6. 添加代码,以下是实际使用的代码,功能是用指定的 word 模板新建一个文档,在预设的书签位置插入文字和图片。

// 将当前所有打开的图像窗口导出到word中, 最多输出6个

[cpp]  view plain copy
  1. void ViewImagesFrame::OnReportimg()  
  2. {  
  3.     CDocument0 cdoc;    // Word 文档类  
  4.       
  5.     if( m_bViewmax )    // 最大化时导出一幅活动图像  
  6.     {  
  7.         // word 图表报告模板文件  
  8.         CString str;  
  9.         str.Format( L"%s\\imgreport1.dotx", theApp.appPath); // 取对应模板   
  10.         if( ! wordopen(  str, cdoc ) )  
  11.             return;  
  12.   
  13.         // 插入文字信息  
  14.         insertinfo( cdoc );  
  15.   
  16.         // 插入图像信息  
  17.         str.Format(L"%s/reportimg0.png", theApp.appPath);  
  18.         m_pView->OnExportimg( str );  
  19.         insertimg(str, cdoc, L"v8img_image0");  
  20.     }  
  21.     else    //否则  
  22.     {  
  23.         int n = m_arViews.GetSize();  
  24.         if( !n )  
  25.             return;  
  26.   
  27.         if( n > 6 )  
  28.             n = 6;  //最多输出6个  
  29.   
  30.         // word 图表报告模板文件  
  31.         CString str;  
  32.         str.Format( L"%s\\imgreport%i.dotx", theApp.appPath, n); // 取对应模板   
  33.         if( ! wordopen(  str, cdoc ) )  
  34.             return;  
  35.   
  36.         // 插入文字信息  
  37.         insertinfo( cdoc );  
  38.   
  39.         // 插入图像信息  
  40.         forint i = 0; i < n; i++ )  
  41.         {  
  42.             str.Format(L"%s/reportimg%i.png", theApp.appPath, i);  
  43.             m_arViews[i]->OnExportimg( str );  
  44.             CString str2;  
  45.             str2.Format(L"v8img_image%i", i);  
  46.             insertimg(str, cdoc, str2);  
  47.         }  
  48.     }  
  49. }  
  50.   
  51. // 将当前所有打开的图像窗口导出到word中, 最多输出6个, LPCTSTR dotxname 指定的模板, CDocument0 &cdoc out 返回新建的文档。  
  52. bool ViewImagesFrame::wordopen( LPCTSTR dotxname, CDocument0 &cdoc )  
  53. {  
  54.     COleVariant  
  55.         covTrue((short)TRUE),  
  56.         covFalse((short)FALSE),  
  57.         covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),  
  58.         //covFileName(_T("E:\\temp\\ac\\Debug\\imgreport.dotx"));  
  59.         covFileName(dotxname);  
  60.   
  61.     CApplication capp;  
  62.     CDocuments cdocs;  
  63.     if(FALSE == capp.CreateDispatch(_T("word.application"), NULL)){  
  64.         return false;  
  65.     }  
  66.   
  67.     capp.put_Visible(TRUE);  
  68.   
  69.     CString version = capp.get_Version();  
  70.     CString name = capp.get_Name();  
  71.     CString cap1 = capp.get_Caption();  
  72.   
  73.     LPDISPATCH disp = capp.get_Documents();  
  74.   
  75.     if(NULL == disp){  
  76.         return false;  
  77.     }  
  78.   
  79.     cdocs.AttachDispatch(disp);  
  80.   
  81.     if(NULL == cdocs.m_lpDispatch){  
  82.         return false;  
  83.     }  
  84.   
  85.     cdoc.AttachDispatch(cdocs.Add(  
  86.         covFileName,  
  87.         covFalse,  
  88.         covFalse,  
  89.         covTrue  
  90.         ));  
  91.   
  92.     if(NULL == cdoc.m_lpDispatch){  
  93.         return false;  
  94.     }  
  95.   
  96.     return true;  
  97. }  
  98.   
  99. // 向word中加入文件信息  
  100. void ViewImagesFrame::insertinfo( CDocument0 &cdoc )  
  101. {  
  102.     myimg * pim =  m_arViews[0]->pimg;   // 取第一个图像的信息  
  103.   
  104.     insertstr(cdoc, L"v8img_name", pim->name );  
  105.   
  106.     CString str;  
  107.     str.Format(L"%i", pim->m_nAge);  
  108.     insertstr(cdoc, L"v8img_age", str );  
  109.   
  110.     insertstr(cdoc, L"v8img_sex", pim->m_strSex );  
  111.   
  112.     insertstr(cdoc, L"v8img_subject", pim->subject );    // 检查方法  
  113.   
  114.     str = pim->scanday.Format( _T("%Y-%m-%d") );  
  115.     insertstr(cdoc, L"v8img_scandate", str );   // 扫描日期  
  116.   
  117.     insertstr(cdoc, L"v8img_sick", pim->sickid );    // 扫描编号  
  118.   
  119.     Cdasys ds;  
  120.     insertstr(cdoc, L"v8img_company", ds.getvalue(L"CompanyName") );    // 单位  
  121.     insertstr(cdoc, L"v8img_address", ds.getvalue(L"CompanyAddress") ); // 单位  
  122.     insertstr(cdoc, L"v8img_telephone", ds.getvalue(L"CompanyTelephone") ); // 单位  
  123. }  
  124.   
  125. // 插入字符串,  CDocument0 &cdoc 文档, LPCTSTR strMark 书签名, LPCTSTR strValue,插入的值  
  126. void ViewImagesFrame::insertstr( CDocument0 &cdoc, LPCTSTR strMark, LPCTSTR strValue )  
  127. {  
  128.     CBookmarks bms = cdoc.get_Bookmarks();  
  129.   
  130.     COleVariant bm( strMark );  
  131.     CBookmark0 bk = bms.Item(bm);  
  132.     CRange rang = bk.get_Range();  
  133.     rang.InsertAfter(strValue);  
  134. }  
  135.   
  136. // 向word中加入图像, PCTSTR imgname 图像文件名, CDocument0 &cdoc 文档word, LPCTSTR mark 书签名  
  137. void ViewImagesFrame::insertimg( LPCTSTR imgname, CDocument0 &cdoc, LPCTSTR mark )  
  138. {  
  139.     CBookmarks bms = cdoc.get_Bookmarks();  
  140.   
  141.     COleVariant bm0( mark );  
  142.     CBookmark0 bk = bms.Item(bm0);  
  143.     CRange rang = bk.get_Range();  
  144.     CnlineShapes shape = cdoc.get_InlineShapes();  
  145.     shape.AddPicture(imgname, COleVariant((short)FALSE), COleVariant((short)TRUE), &_variant_t(rang));  
  146. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值