VS2015下使用MFC操作Office(Word)

2015-11-27  本文已影响0人  厚德菌

本文介绍MFC中如何根据word模版生成我们所需要的word文档。
开发环境:Win7+VS2015+word2016

操作步骤:

//#import "C:\\Program Files\\Microsoft Office\\root\\Office16\\MSWORD.OLB" no_namespace   
#include "msword/CApplication.h" //word程序对象   
#include "msword/CDocuments.h" //文档集对象   
#include "msword/CDocument0.h" //docx对象   
#include "msword/CSelection.h" //所选内容   
#include "msword/CCell.h" //单个单元格   
#include "msword/CCells.h" //单元格集合   
#include "msword/CRange.h" //文档中的一个连续范围   
#include "msword/CTable0.h" //单个表格   
#include "msword/CTables0.h" //表格集合   
#include "msword/CRow.h" //单个行   
#include "msword/CRows.h" //行集合   
#include "msword/CBookmark0.h" //   
#include "msword/CBookmarks.h" //   
    SetRegistryKey(_T("Local AppWizard-Generated Applications"));

    if (!AfxOleInit())
    {
        AfxMessageBox(_T("无法初始化COM的动态链接库!"));
        return FALSE;
    }

好了,现在我们的准备工作基本上就完成了,可以使用word的的操作类了。前文中讲了,我们要根据word模版以及书签功能产生我们所需要的word文档,所以现在我们先创建一个word模版文件。

    COleVariant covZero((short)0),
        covTrue((short)TRUE),
        covFalse((short)FALSE),
        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),
        covDocxType((short)0),
        start_line, end_line,
        dot(_T("c:\\Template.dot"));

    CApplication wordApp;
    CDocuments docs;
    CDocument0 docx;
    CBookmarks bookmarks;
    CBookmark0 bookmark;
    CRange range;
    CCell cell;
    if (!wordApp.CreateDispatch(_T("Word.Application")))
    {
        AfxMessageBox(_T("本机没有安装word产品!"));
        return;
    }

    wordApp.put_Visible(FALSE);
    CString wordVersion = wordApp.get_Version();
    docs = wordApp.get_Documents();
    docx = docs.Add(dot, covOptional, covOptional, covOptional);
    bookmarks = docx.get_Bookmarks();

    bookmark = bookmarks.Item(&_variant_t(_T("标题1")));
    range = bookmark.get_Range();
    range.put_Text(_T("这是标题1"));

    bookmark = bookmarks.Item(&_variant_t(_T("标题2")));
    range = bookmark.get_Range();
    range.put_Text(_T("这是标题2"));

    bookmark = bookmarks.Item(&_variant_t(_T("序号1")));
    range = bookmark.get_Range();
    range.put_Text(_T("1"));

    bookmark = bookmarks.Item(&_variant_t(_T("姓名1")));
    range = bookmark.get_Range();
    range.put_Text(_T("王二小"));

    bookmark = bookmarks.Item(&_variant_t(_T("年龄1")));
    range = bookmark.get_Range();
    range.put_Text(_T("10"));

    CString strSavePath = _T("C:");
    strSavePath += _T("\\test.docx");
    docx.SaveAs(COleVariant(strSavePath), covOptional, covOptional, covOptional, covOptional,
        covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);

    // 退出word应用
    docx.Close(covFalse, covOptional, covOptional);
    wordApp.Quit(covOptional, covOptional, covOptional);
    range.ReleaseDispatch();
    bookmarks.ReleaseDispatch();
    wordApp.ReleaseDispatch();

    AfxMessageBox(_T("test.docx生成成功!"));

小结:

本文简要介绍了使用书签的方法生成我们所需要的word文档,在整个过程中有几点需要注意:

除了使用模版书签操作word还可以直接用代码来生成我们所需要的word文档,大家可以试验一下,本文不在赘述。

关于代码:

本文代码已经同步到Github上。


全文完

上一篇 下一篇

猜你喜欢

热点阅读