[转]VC++操作Word

工具: vc++6.0 。

关键字: c++ , MFC 。

要求:系统安装 MS OFFICE 2003 。

过程:

准备工作:

1.       创建一个 MFC(EXE) 工程: MFC AppWizard ( exe ),工程为对话框形式(测试用)。

2.       在 CLASS VIEW 页面创建一个类:类名为: CWordOffice ,类的类型为: Class type : Generic Class 。

3.       在工具栏中找到 view -> class wizard -> Automation -> add class -> from a tye library ,然后选中 offfice 安装的目录中的 MSWORD.OLB ,然后选中所有列出的类名,点 OK 完成。

4. 最后,这里给出一个操作word的最简单的程序源码wordApp.rar(XP + VC6 + Word2010)

 

 

准备工作完成,下面贴出相关部分的代码:

CWordOffice.h 中的手动写入的代码如下(自动生成的没有加入):
 
 
#include "atlbase.h"
#include "msword.h"
 
class  CWordOffice
{
private :
     _Application m_wdApp;
     Documents m_wdDocs;
     _Document m_wdDoc;
     Selection m_wdSel;
     Range     m_wdRange;
     InlineShapes m_wdInlineShapes;
     InlineShape m_wdInlineShape;
 
public :
     CWordOffice();
     virtual  ~CWordOffice();
 
public :
     //操作
     //**********************创建新文档*******************************************
     BOOL  CreateApp();                    //创建一个新的WORD应用程序
     BOOL  CreateDocuments();                //创建一个新的Word文档集合
     BOOL  CreateDocument();                //创建一个新的Word文档
     BOOL  Create();                        //创建新的WORD应用程序并创建一个新的文档
     void  ShowApp();                        //显示WORD文档
     void  HideApp();                        //隐藏word文档
 
     //**********************打开文档*********************************************
     BOOL  OpenDocument(CString fileName); //打开已经存在的文档。
     BOOL  Open(CString fileName);        //创建新的WORD应用程序并打开一个已经存在的文档。
     BOOL  SetActiveDocument( short  i);    //设置当前激活的文档。
 
     //**********************保存文档*********************************************
     BOOL  SaveDocument();                //文档是以打开形式,保存。
     BOOL  SaveDocumentAs(CString fileName); //文档以创建形式,保存。
     BOOL  CloseDocument();
     void  CloseApp();
 
     //**********************文本书写操作*****************************************
     void  WriteText(CString szText);        //当前光标处写文本
     void  WriteNewLineText(CString szText, int  nLineCount = 1); //换N行写字
     void  WriteEndLine(CString szText);    //文档结尾处写文本
     void  WholeStory();                    //全选文档内容
     void  Copy();                        //复制文本内容到剪贴板
     void  InsertFile(CString fileName);    //将本地的文件全部内容写入到当前文档的光标处。
     
     //**********************图片插入操作*****************************************
     void  InsertShapes(CString fileName); //在当前光标的位置插入图片
     
     //**********************超链接插入操作*****************************************
     void  InsertHyperlink(CString fileLink); //超级链接地址,可以是相对路径。
};
 
 
 
 
 
CWordOffice.cpp中的手写代码如下:
 
CWordOffice::CWordOffice()
{
 
}
 
CWordOffice::~CWordOffice()
{
     COleVariant vTrue(( short )TRUE),   
                 vFalse(( short )FALSE),
                 vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
     //m_wdDoc.Save();
     m_wdApp.Quit(vFalse,    // SaveChanges.
              vTrue,            // OriginalFormat.
              vFalse            // RouteDocument.
              );
     //释放内存申请资源
     m_wdInlineShape.ReleaseDispatch();
     m_wdInlineShapes.ReleaseDispatch();
     //m_wdTb.ReleaseDispatch();
     m_wdRange.ReleaseDispatch();
     m_wdSel.ReleaseDispatch();
     //m_wdFt.ReleaseDispatch();
     m_wdDoc.ReleaseDispatch();
     m_wdDocs.ReleaseDispatch();
     m_wdApp.ReleaseDispatch();
}
 
//操作
BOOL  CWordOffice::CreateApp()
{
     if  (FALSE == m_wdApp.CreateDispatch( "Word.Application" ))
     {
         AfxMessageBox( "Application创建失败,请确保安装了word 2000或以上版本!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     return  TRUE;
}
 
BOOL  CWordOffice::CreateDocuments()
{
     if  (FALSE == CreateApp())
     {
         return  FALSE;
     }
     m_wdDocs.AttachDispatch(m_wdApp.GetDocuments());
     if  (!m_wdDocs.m_lpDispatch)
     {
         AfxMessageBox( "Documents创建失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     return  TRUE;
}
 
BOOL  CWordOffice::CreateDocument()
{
     if  (!m_wdDocs.m_lpDispatch)
     {
         AfxMessageBox( "Documents为空!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
 
     COleVariant varTrue( short (1),VT_BOOL),vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
     CComVariant Template(_T( "" ));    //没有使用WORD的文档模板
     CComVariant NewTemplate( false ),DocumentType(0),Visible;
 
     m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible);   
 
     //得到document变量
     m_wdDoc = m_wdApp.GetActiveDocument();
     if  (!m_wdDoc.m_lpDispatch)
     {
         AfxMessageBox( "Document获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到selection变量
     m_wdSel = m_wdApp.GetSelection();
     if  (!m_wdSel.m_lpDispatch)
     {
         AfxMessageBox( "Select获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到Range变量
     m_wdRange = m_wdDoc.Range(vOptional,vOptional);
     if (!m_wdRange.m_lpDispatch)
     {
         AfxMessageBox( "Range获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
 
     return  TRUE;
}
 
BOOL  CWordOffice::Create()
{
     if  (FALSE == CreateDocuments())
     {
         return  FALSE;
     }
     return  CreateDocument();
}
 
void  CWordOffice::ShowApp()
{
     m_wdApp.SetVisible(TRUE);
}
 
void  CWordOffice::HideApp()
{
     m_wdApp.SetVisible(FALSE);
}
 
BOOL  CWordOffice::OpenDocument(CString fileName)
{
     if  (!m_wdDocs.m_lpDispatch)
     {
         AfxMessageBox( "Documents为空!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
 
     COleVariant vTrue(( short )TRUE),   
                 vFalse(( short )FALSE),
                 vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR),
                 vZ(( short )0);
     COleVariant     vFileName(_T(fileName));
     
     //得到document变量
     m_wdDoc.AttachDispatch(m_wdDocs.Open(
                                 vFileName,        // FileName
                                 vTrue,            // Confirm Conversion.
                                 vFalse,            // ReadOnly.
                                 vFalse,            // AddToRecentFiles.
                                 vOptional,        // PasswordDocument.
                                 vOptional,        // PasswordTemplate.
                                 vOptional,        // Revert.
                                 vOptional,        // WritePasswordDocument.
                                 vOptional,        // WritePasswordTemplate.
                                 vOptional,        // Format. // Last argument for Word 97
                                 vOptional,        // Encoding // New for Word 2000/2002
                                 vOptional,        // Visible
                                 //如下4个是word2003需要的参数。本版本是word2000。
                                 vOptional,    // OpenAndRepair
                                 vZ,            // DocumentDirection wdDocumentDirection LeftToRight
                                 vOptional,    // NoEncodingDialog
                                 vOptional
                                 
                                 )                // Close Open parameters
                             );                    // Close AttachDispatch
     
     if  (!m_wdDoc.m_lpDispatch)
     {
         AfxMessageBox( "Document获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到selection变量
     m_wdSel = m_wdApp.GetSelection();
     if  (!m_wdSel.m_lpDispatch)
     {
         AfxMessageBox( "Select获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到全部DOC的Range变量
     m_wdRange = m_wdDoc.Range(vOptional,vOptional);
     if (!m_wdRange.m_lpDispatch)
     {
         AfxMessageBox( "Range获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     return  TRUE;
}
 
BOOL  CWordOffice::Open(CString fileName)
{
     if  (FALSE == CreateDocuments())
     {
         return  FALSE;
     }
     return  OpenDocument(fileName);
}
 
BOOL  CWordOffice::SetActiveDocument( short  i)
{
     COleVariant     vIndex(_T(i)),vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
 
     m_wdDoc.AttachDispatch(m_wdDocs.Item(vIndex));
     m_wdDoc.Activate();
     if  (!m_wdDoc.m_lpDispatch)
     {
         AfxMessageBox( "Document获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到selection变量
     m_wdSel = m_wdApp.GetSelection();
     if  (!m_wdSel.m_lpDispatch)
     {
         AfxMessageBox( "Select获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到全部DOC的Range变量
     m_wdRange = m_wdDoc.Range(vOptional,vOptional);
     if (!m_wdRange.m_lpDispatch)
     {
         AfxMessageBox( "Range获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     HideApp();
     return  TRUE;
}
 
BOOL  CWordOffice::SaveDocument()
{
     if  (!m_wdDoc.m_lpDispatch)
     {
         AfxMessageBox( "Document获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     m_wdDoc.Save();
     return  TRUE;
}
 
BOOL  CWordOffice::SaveDocumentAs(CString fileName)
{
     if  (!m_wdDoc.m_lpDispatch)
     {
         AfxMessageBox( "Document获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     COleVariant vTrue(( short )TRUE),   
                 vFalse(( short )FALSE),
                 vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
     COleVariant vFileName(_T(fileName));
 
     m_wdDoc.SaveAs(
                 vFileName,    //VARIANT* FileName
                 vOptional,    //VARIANT* FileFormat
                 vOptional,    //VARIANT* LockComments
                 vOptional,    //VARIANT* Password
                 vOptional,    //VARIANT* AddToRecentFiles
                 vOptional,    //VARIANT* WritePassword
                 vOptional,    //VARIANT* ReadOnlyRecommended
                 vOptional,    //VARIANT* EmbedTrueTypeFonts
                 vOptional,    //VARIANT* SaveNativePictureFormat
                 vOptional,    //VARIANT* SaveFormsData
                 vOptional,    //VARIANT* SaveAsAOCELetter
                 vOptional,
                 vOptional,
                 vOptional,
                 vOptional,
                 vOptional
                 );
     return     TRUE;
}
 
BOOL  CWordOffice::CloseDocument()
{
     COleVariant vTrue(( short )TRUE),   
                 vFalse(( short )FALSE),
                 vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
     m_wdDoc.Close(vFalse,    // SaveChanges.
              vTrue,            // OriginalFormat.
              vFalse            // RouteDocument.
              );
     m_wdDoc.AttachDispatch(m_wdApp.GetActiveDocument());
     if  (!m_wdDoc.m_lpDispatch)
     {
         AfxMessageBox( "Document获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到selection变量
     m_wdSel = m_wdApp.GetSelection();
     if  (!m_wdSel.m_lpDispatch)
     {
         AfxMessageBox( "Select获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     //得到全部DOC的Range变量
     m_wdRange = m_wdDoc.Range(vOptional,vOptional);
     if (!m_wdRange.m_lpDispatch)
     {
         AfxMessageBox( "Range获取失败!" , MB_OK|MB_ICONWARNING);
         return  FALSE;
     }
     return  TRUE;
}
 
void  CWordOffice::CloseApp()
{
     COleVariant vTrue(( short )TRUE),   
                 vFalse(( short )FALSE),
                 vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
     m_wdDoc.Save();
     m_wdApp.Quit(vFalse,    // SaveChanges.
              vTrue,            // OriginalFormat.
              vFalse            // RouteDocument.
              );
     //释放内存申请资源
     m_wdInlineShape.ReleaseDispatch();
     m_wdInlineShapes.ReleaseDispatch();
     //m_wdTb.ReleaseDispatch();
     m_wdRange.ReleaseDispatch();
     m_wdSel.ReleaseDispatch();
     //m_wdFt.ReleaseDispatch();
     m_wdDoc.ReleaseDispatch();
     m_wdDocs.ReleaseDispatch();
     m_wdApp.ReleaseDispatch();
}
 
void  CWordOffice::WriteText(CString szText)
{
     m_wdSel.TypeText(szText);
}
 
void  CWordOffice::WriteNewLineText(CString szText, int  nLineCount /* = 1 */)
{
     int  i;
     if  (nLineCount <= 0)
     {
         nLineCount = 0;
     }
     for  (i = 0; i < nLineCount; i++)
     {
         m_wdSel.TypeParagraph();
     }
     WriteText(szText);
}
 
void  CWordOffice::WriteEndLine(CString szText)
{
     m_wdRange.InsertAfter(szText);
}
 
void  CWordOffice::WholeStory()
{
     m_wdRange.WholeStory();
}
 
void  CWordOffice::Copy()
{
     m_wdRange.CopyAsPicture();
}
 
void  CWordOffice::InsertFile(CString fileName)
{
     COleVariant     vFileName(fileName),
                  vTrue(( short )TRUE),
                  vFalse(( short )FALSE),
                  vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR),
                  vNull(_T( "" ));
     /*
     void InsertFile(LPCTSTR FileName, VARIANT* Range, VARIANT* ConfirmConversions, VARIANT* Link, VARIANT* Attachment);
     */
     m_wdSel.InsertFile(
                     fileName,
                     vNull,
                     vFalse,
                     vFalse,
                     vFalse
                     );
}
 
void  CWordOffice::InsertShapes(CString fileName)
{
     COleVariant vTrue(( short )TRUE),   
                 vFalse(( short )FALSE),
                 vOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
     m_wdInlineShapes=m_wdSel.GetInlineShapes();
     m_wdInlineShape=m_wdInlineShapes.AddPicture(fileName,vFalse,vTrue,vOptional);
}
 
void  CWordOffice::InsertHyperlink(CString fileLink)
{
     COleVariant     vAddress(_T(fileLink)),vSubAddress(_T( "" ));
     Range aRange = m_wdSel.GetRange();
     Hyperlinks vHyperlinks(aRange.GetHyperlinks());
 
     vHyperlinks.Add(
                     aRange,            //Object,必需。转换为超链接的文本或图形。
                     vAddress,         //Variant 类型,可选。指定的链接的地址。此地址可以是电子邮件地址、Internet 地址或文件名。请注意,Microsoft Word 不检查该地址的正确性。
                     vSubAddress,     //Variant 类型,可选。目标文件内的位置名,如书签、已命名的区域或幻灯片编号。
                     vAddress,         //Variant 类型,可选。当鼠标指针放在指定的超链接上时显示的可用作“屏幕提示”的文本。默认值为 Address。
                     vAddress,         //Variant 类型,可选。指定的超链接的显示文本。此参数的值将取代由 Anchor 指定的文本或图形。
                     vSubAddress        //Variant 类型,可选。要在其中打开指定的超链接的框架或窗口的名字。
                     );
     vHyperlinks.ReleaseDispatch();
}
 
 
 
 
测试部分代码如下:
 
需要在对话框中添加一个按钮,按钮的事件方法内添加如下代码:
 
void  CWordOperateDlg::OnButtonWord()
{
      AfxEnableControlContainer();  
      AfxOleInit();
      CWordOffice wd;
      wd.CreateDocuments();
      wd.OpenDocument( "d:\\a.doc" );
      wd.ShowApp(); //显示word
}


http://www.cnblogs.com/joeblackzqq/archive/2010/11/07/1871374.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值