//段落對(duì)齊的屬性enumAlignment{wdAlignParagraphCenter=1,wdAlig" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

c++封裝Word (比較全了)

系統(tǒng) 2586 0
      小魚兒C++處女作(vc word 操作封裝)

本人先聲明這個(gè)程序是參考了 汪自軍

封裝類 來寫的。



如果程序?qū)δ阌兴鶐椭覍⒏械胶軜s幸。。

期末到了 希望大家都不要掛科哦,反正我只有英語考了,貌似及格沒有壓力啊。。。。



程序代碼:

#ifndef CMYWORD_H

#define CMYWORD_H



#include "msword.h"

#include <ATLBASE.H>





//段落對(duì)齊的屬性

enum Alignment{wdAlignParagraphCenter=1,wdAlignParagraphRight,wdAlignParagraphJustify};



//保存Word類型

/*

wdFormatDocument  標(biāo)準(zhǔn)的doc文檔

wdFormatWebArchiv 單個(gè)文件網(wǎng)頁

wdFormatHTML    網(wǎng)頁

wdFormatFilteredHTML    去掉一些微軟信息的網(wǎng)頁

wdFormatTemplate    模版

*/



enum SaveType{

    wdFormatDocument=0,

    wdFormatWebArchive=9,

    wdFormatHTML=8,

    wdFormatFilteredHTML=10,

    wdFormatTemplate=1

};



class CmyWord

{

    //一些對(duì)象申明

public:

    _Application app;//創(chuàng)建word

    Documents docs;//word文檔集合

    _Document doc;//一個(gè)word文件

    _Font font;//字體對(duì)象

    Selection sel;//選擇編輯對(duì)象 沒有對(duì)象的時(shí)候就是插入點(diǎn)

    Table tab;//表格對(duì)象

    Range range;

    



public:

    CmyWord();//構(gòu)造函數(shù)

    virtual ~CmyWord();//析構(gòu)函數(shù)



    void ShowApp(BOOL flag);

    void AppClose();

    BOOL InitCOM();//對(duì)COM進(jìn)行初始化

    BOOL CreateAPP();//創(chuàng)建一個(gè)word程序

    BOOL CreateDocument();//創(chuàng)建word文檔

    BOOL Create();//創(chuàng)建一個(gè)word程序和Word文檔

    



    BOOL Open(CString FileName,BOOL ReadOnly = FALSE,BOOL  AddToRecentFiles = FALSE);//打開一個(gè)word文檔;

    BOOL Close(BOOL SaveChange=FALSE);//關(guān)閉一個(gè)word文檔

    BOOL Save();//保存文檔

    BOOL SaveAs(CString FileName,int SaveType=0);//保存類型



    //////////////////////////文件寫操作操作/////////////////////////////////////////////



    void WriteText(CString Text);//寫入文本

    void NewLine(int nCount=1);//回車換N行

    void WriteTextNewLineText(CString Text,int nCount=1);//回測(cè)換N行寫入文字



    //////////////////////////////////////////////////////////////////////////



    //////////////////////////字體設(shè)置////////////////////////////////////////



    void SetFont(CString FontName,int FontSize=9,long FontColor=0,long FontBackColor=0);

    void SetFont(BOOL Blod,BOOL Italic=FALSE,BOOL UnderLine=FALSE);

    void SetTableFont(int Row,int Column,CString FontName,int FontSize=9,long FontColor=0,long FontBackColor=0);



    //void SetTableFont();//統(tǒng)一對(duì)表格的文字做出處理.



        /////////////////////////表格操作/////////////////////////////////////



    void CreateTable(int Row,int Column);

    void WriteCellText(int Row,int Column,CString Text);



    /////////////////////////////設(shè)置對(duì)齊屬性///////////////////////////////////////



    void SetParaphformat(int Alignment);





    /////////////////////////////一些常用操作///////////////////////////////////////



    //查找字符串 然后全部替換

    void FindWord(CString FindW,CString RelWord);



    //獲取Word 純文本內(nèi)容

    void GetWordText(CString &Text);



    //Word 打印

    void PrintWord();



};



#endif



程序代碼:

#include "StdAfx.h"

#include "CmyWord.h"





//聲明 vOpt 最好用這下面這個(gè) 因?yàn)槲易约合矚g用 CComVariant vOpt;出寫 可能在一些特殊環(huán)境會(huì)出現(xiàn)錯(cuò)誤

//COleVariant vOpt(( long )DISP_E_PARAMNOTFOUND,  VT_ERROR);

//---------------------------------------------------------------------------------------------------------

//                       小魚兒 Word 封裝類初步完成 2012 1,4  2:04

//

//1 我只學(xué)習(xí)封裝了一些Word中比較使用的東西,后續(xù)還會(huì)繼續(xù)改進(jìn),看哪些需要的東西要進(jìn)來。來方便我們的工作學(xué)習(xí)

//2 這個(gè)我第一次用c++ 來寫程序, 也是我c++入門的程序吧。有什么指點(diǎn)請(qǐng)加我QQ879801208 無聊勿加

//3 程序代碼可能沒有全部測(cè)試 如果有問題 謝謝指正。

//4 如果有高手想指點(diǎn)我一下 我是非常高興的。。。。

//---------------------------------------------------------------------------------------------------------

CmyWord::CmyWord()

{

    InitCOM();

}



CmyWord::~CmyWord()

{

    //釋放資源最好從 小到大的順序來釋放。這個(gè)和c里面一些釋放資源的道理是一樣的

    //和c+= 先析構(gòu)兒子 再析構(gòu)父親是一樣的。

  CoUninitialize();

  font.ReleaseDispatch();

  range.ReleaseDispatch();

  tab.ReleaseDispatch();

  doc.ReleaseDispatch();

  docs.ReleaseDispatch();

  app.ReleaseDispatch();

  sel.ReleaseDispatch();

}



BOOL CmyWord::InitCOM()

{

    if(CoInitialize(NULL)!=S_OK)

    {

        AfxMessageBox("初始化com庫失敗");

        return 0;

    }

    else

    {

        return TRUE;

    }

}



BOOL CmyWord::CreateAPP()

{

    if(!app.CreateDispatch("Word.Application"))

    {

        AfxMessageBox("你沒有安裝OFFICE");

        return FALSE;

    }

    else

    {

        app.SetVisible(TRUE);

        return TRUE;

    }

}



//我的類默認(rèn)是打開的,而Word 中默認(rèn)看不見的。

void CmyWord::ShowApp(BOOL flag)

{

    if(!app.m_lpDispatch)

    {

        AfxMessageBox("你還沒有獲得Word對(duì)象");

        return;

    }

    else

    {

        app.SetVisible(flag);

    }

}

BOOL CmyWord::CreateDocument()

{

    if(!app.m_lpDispatch)

    {

        AfxMessageBox("Application為空,Documents創(chuàng)建失敗!", MB_OK|MB_ICONWARNING);

        return FALSE;

    }

    else

    {

        docs=app.GetDocuments();

        if(docs.m_lpDispatch==NULL)

        {

            AfxMessageBox("創(chuàng)建DOCUMENTS 失敗");

            return FALSE;

        }

        else

        {

            CComVariant Template(_T(""));//創(chuàng)建一個(gè)空的模版

            CComVariant NewTemplate(false);

            CComVariant DocumentType(0);

            CComVariant Visible;//不處理 用默認(rèn)值

            doc = docs.Add(&Template,&NewTemplate,&DocumentType,&Visible);

            if(!doc.m_lpDispatch)

            {

                AfxMessageBox("創(chuàng)建word失敗");

                return FALSE;

            }

            else

            {

                sel = app.GetSelection();//獲得當(dāng)前Word操作。開始認(rèn)為是在doc獲得selection。仔細(xì)想一下確實(shí)應(yīng)該是Word的接口點(diǎn)

                if(!sel.m_lpDispatch)

                {

                    AfxMessageBox("selection 獲取失敗");

                    return FALSE;

                }

                else

                {

                    return TRUE;

                }

            }

        }

    }

}



BOOL CmyWord ::Create()

{

    if(CreateAPP())

    {

        if(CreateDocument())

        {

            return TRUE;

        }

        else

            return FALSE;

    }

    else

        return FALSE;

}



BOOL CmyWord::Open(CString FileName,BOOL ReadOnly /* = FALSE */,BOOL AddToRecentFiles /* = FALSE */)

{



    CComVariant Read(ReadOnly);

    CComVariant AddToR(AddToRecentFiles);

    CComVariant Name(FileName);



    COleVariant vTrue((short)TRUE), vFalse((short)FALSE);

    COleVariant varstrNull("");

    COleVariant varZero((short)0);

    COleVariant varTrue(short(1),VT_BOOL);

    COleVariant varFalse(short(0),VT_BOOL);

    COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);



    if(!app.m_lpDispatch)

    {

        if(CreateAPP()==FALSE)

        {

            return FALSE;

        }

    }

    if(!docs.m_lpDispatch)

    {

        docs=app.GetDocuments();

        if(!docs.m_lpDispatch)

        {

            AfxMessageBox("DocuMent 對(duì)象創(chuàng)建失敗");

            return FALSE;

        }

    }

    CComVariant format(0);//打開方式 0 為doc的打開方式

    doc=docs.Open(&Name,varFalse,&Read,&AddToR,vOpt,vOpt,

        vFalse,vOpt,vOpt,&format,vOpt,vTrue,vOpt,vOpt,vOpt,vOpt);

    if(!doc.m_lpDispatch)

    {

        AfxMessageBox("文件打開失敗");

        return FALSE;

    }

    else

    {

        sel=app.GetSelection();

        if(!sel.m_lpDispatch)

        {

            AfxMessageBox("打開失敗");

            return FALSE;

        }

        return TRUE;

    }

}



BOOL CmyWord::Save()

{

    if(!doc.m_lpDispatch)

    {

        AfxMessageBox("Documents 對(duì)象都沒有建立 保存失敗");

        return FALSE;

    }

    else

    {

        doc.Save();

        return TRUE;

    }

}



BOOL CmyWord::SaveAs(CString FileName,int SaveType/* =0 */)

{

    CComVariant vTrue(TRUE);

    CComVariant vFalse(FALSE);

    CComVariant vOpt;

    CComVariant cFileName(FileName);

    CComVariant FileFormat(SaveType);

    doc=app.GetActiveDocument();

    if(!doc.m_lpDispatch)

    {

        AfxMessageBox("Document 對(duì)象沒有建立 另存為失敗");

        return FALSE;

    }

    else

    {  

        //最好按照宏來寫 不然可能出現(xiàn)問題、 畢竟這個(gè)是微軟寫的

        /*ActiveDocument.SaveAs FileName:="xiaoyuer.doc", FileFormat:= _

    wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _

    True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _

    False, SaveNativePictureFormat:=False, SaveFormsData:=False, _

        SaveAsAOCELetter:=False*/





        doc.SaveAs(&cFileName,&FileFormat,&vFalse,COleVariant(""),&vTrue,

            COleVariant(""),&vFalse,&vFalse,&vFalse,&vFalse,&vFalse,&vOpt,&vOpt,&vOpt,&vOpt,&vOpt);

        

    }

    return TRUE;

}



BOOL CmyWord::Close(BOOL SaveChange/* =FALSE */)

{

    CComVariant vTrue(TRUE);

    CComVariant vFalse(FALSE);

    CComVariant vOpt;

    CComVariant cSavechage(SaveChange);

    if(!doc.m_lpDispatch)

    {

        AfxMessageBox("_Document 對(duì)象獲取失敗,關(guān)閉操作失敗");

        return FALSE;

    }

    else

    {

        if(TRUE==SaveChange)

        {

            Save();

        }

//下面第一個(gè)參數(shù)填vTrue 會(huì)出現(xiàn)錯(cuò)誤,可能是后面的參數(shù)也要對(duì)應(yīng)的變化

//但vba 沒有給對(duì)應(yīng)參數(shù) 我就用這種方法來保存



        doc.Close(&vFalse,&vOpt,&vOpt);

    }

    return TRUE;

}



void CmyWord::WriteText(CString Text)

{

    sel.TypeText(Text);

}



void CmyWord::NewLine(int nCount/* =1 */)

{

    if(nCount<=0)

    {

        nCount = 0;

    }

    else

    {

        for(int i=0;i<nCount;i++)

        {

            sel.TypeParagraph();//新建一段

        }

    }

}



void CmyWord::WriteTextNewLineText(CString Text,int nCount/* =1 */)

{

    NewLine(nCount);

    WriteText(Text);

}



void CmyWord::SetFont(BOOL Blod,BOOL Italic/* =FALSE */,BOOL UnderLine/* =FALSE */)

{

    if(!sel.m_lpDispatch)

    {

        AfxMessageBox("編輯對(duì)象失敗,導(dǎo)致字體不能設(shè)置");

        return;

    }

    else

    {

        sel.SetText("F");

        font=sel.GetFont();//獲得字體編輯對(duì)象;

        font.SetBold(Blod);

        font.SetItalic(Italic);

        font.SetUnderline(UnderLine);

        sel.SetFont(font);

    }

}



void CmyWord::SetFont(CString FontName,int FontSize/* =9 */,long FontColor/* =0 */,long FontBackColor/* =0 */)

{

    if(!sel.m_lpDispatch)

    {

        AfxMessageBox("Select 為空,字體設(shè)置失敗!");

        return;

    }

    //這里只是為了獲得一個(gè)對(duì)象,因?yàn)闆]有對(duì)象你哪里來的設(shè)置呢.

    //因?yàn)槭怯肎etFont來獲取的對(duì)象的。

    //所以用SetText來獲得字體屬性

    sel.SetText("a");

    font=sel.GetFont();//獲取字體對(duì)象

    font.SetSize(20);

    font.SetName(FontName);

    font.SetColor(FontColor);

    sel.SetFont(font);//選擇對(duì)象

}



void CmyWord::SetTableFont(int Row,int Column,CString FontName,int FontSize/* =9 */,long FontColor/* =0 */,long FontBackColor/* =0 */)

{

    Cell c=tab.Cell(Row,Column);

    c.Select();

    _Font ft=sel.GetFont();

    ft.SetName(FontName);

    ft.SetSize(FontSize);

    ft.SetColor(FontColor);

    Range r=sel.GetRange();

    r.SetHighlightColorIndex(FontBackColor);

}



void CmyWord::CreateTable(int Row,int Column)

{

    doc=app.GetActiveDocument();

    Tables tbs=doc.GetTables(); 

    CComVariant Vopt;

    if(!tbs.m_lpDispatch)

    {

        AfxMessageBox("創(chuàng)建表格對(duì)象失敗");

        return;

    }

    else

    {

        tbs.Add(sel.GetRange(),Row,Column,&Vopt,&Vopt);

        tab=tbs.Item(1);//如果有多個(gè)表格可以通過這個(gè)來找到表格對(duì)象。

    }

    

}



void CmyWord::WriteCellText(int Row,int Column,CString Text)

{

    Cell c=tab.Cell(Row,Column);

    c.Select();//選擇表格中的單元格

    sel.TypeText(Text);

}



void CmyWord::SetParaphformat(int Alignment)

{

    _ParagraphFormat p=sel.GetParagraphFormat();

    p.SetAlignment(Alignment);

    sel.SetParagraphFormat(p);

}





void CmyWord::FindWord(CString FindW,CString RelWord)

{

    sel=app.GetSelection();

    Find myFind=sel.GetFind();

    if(!myFind.m_lpDispatch)

    {

        AfxMessageBox("獲取Find 對(duì)象失敗");

        return;

    }

    else

    {

        //下面三行是按照vba 寫的

        myFind.ClearFormatting();

        Replacement repla=myFind.GetReplacement();

        repla.ClearFormatting();



        COleVariant Text(FindW);

        COleVariant re(RelWord);

        COleVariant vTrue((short)TRUE), vFalse((short)FALSE);

        COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

        CComVariant v(1);

        CComVariant v2(2);

        CComVariant v3(_T(""));

        //下面的Replace 對(duì)應(yīng)的替換的范圍是哪里.

        // 1 代表一個(gè) 2 代表整個(gè)文檔

        //myFind.Execute(Text,vFalse,vFalse,vFalse,vFalse,vFalse,vTrue,&v,vFalse,re,&v2,vOpt,vOpt,vOpt,vOpt);

        myFind.Execute(Text,vFalse,vFalse,vFalse,vFalse,vFalse,

            vTrue,&v,vFalse,&re,&v2,vOpt,vOpt,vOpt,vOpt);

    }

}



void CmyWord::GetWordText(CString &Text)

{

    //CComVariant vOpt;

    COleVariant vOpt(( long )DISP_E_PARAMNOTFOUND,  VT_ERROR); 

    doc=app.GetActiveDocument();//獲得當(dāng)前激活文檔 就是當(dāng)前正在編輯文檔

    if(!doc.m_lpDispatch)

    {

        AfxMessageBox("獲取激活文檔對(duì)象失敗");

        return;

    }

    else

    {

        range=doc.Range(vOpt,vOpt);

        Text=range.GetText();

        AfxMessageBox(Text);

    }

}



//打印代碼我直接Cppy 別人的 因?yàn)槲覜]有打印機(jī)所以不好做測(cè)試

//這里只是為了方便大家



void CmyWord::PrintWord()

{

    doc = app.GetActiveDocument();

    if(!doc.m_lpDispatch)

    {

        AfxMessageBox("獲取激活文檔對(duì)象失敗");

        return;

    }

    else

    {

        COleVariant covTrue((short)TRUE),

        covFalse((short)FALSE),

        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);



        doc.PrintOut(covFalse,              // Background.

            covOptional,           // Append.

            covOptional,           // Range.

            covOptional,           // OutputFileName.

            covOptional,           // From.

            covOptional,           // To.

            covOptional,           // Item.

            COleVariant((long)1),  // Copies.

            covOptional,           // Pages.

            covOptional,           // PageType.

            covOptional,           // PrintToFile.

            covOptional,           // Collate.

            covOptional,           // ActivePrinterMacGX.

            covOptional,           // ManualDuplexPrint.

            covOptional,           // PrintZoomColumn  New with Word 2002

            covOptional,           // PrintZoomRow          ditto

            covOptional,           // PrintZoomPaperWidth   ditto

            covOptional);          // PrintZoomPaperHeight  ditto*/

    }



}





void CmyWord::AppClose()

{

    COleVariant vOpt(( long )DISP_E_PARAMNOTFOUND,  VT_ERROR);

    if(!app.m_lpDispatch)

    {

        AfxMessageBox("獲取Word 對(duì)象失敗,關(guān)閉操作失敗");

        return;

    }

    else

    {

        app.Quit(vOpt,vOpt,vOpt);

        //這里釋放資源好像不是很好,所以我就在析構(gòu)函數(shù)去處理了。

    }

}







我的工程 是vc6 控制臺(tái) 支持MFC 

http://115.com/file/e6gkjtpk#

word操作封裝類.zip


    

c++封裝Word (比較全了)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 色综合图区 | 国产婷婷色一区二区三区 | 日日夜夜骑 | 手机看片亚洲 | 亚洲精品一区二区三区四区 | 成人性毛片 | 国产精品免费看香蕉 | 日韩一级片在线观看 | 色偷偷7777www| 99爱精品视频 | 免费99热在线观看 | 在线观看国产亚洲 | 国产欧美日韩精品a在线观看高清 | 91网红福利精品区一区二 | 羞羞视频网页 | 欧美精品免费看 | 亚洲综合色吧 | 国产综合一区二区 | 久久久毛片免费全部播放 | 国产精品视频网站 | 四虎在线永久视频观看 | 少妇美女极品美軳人人体 | 成人影院免费在线观看 | 国产精品亚洲高清一区二区 | 国产成人在线网站 | 青青青国产色视频在线观看 | 欧美精品大片 | 亚洲精品美女一区二区三区乱码 | 九九免费精品视频 | 久久精品国产一区二区三区肥胖 | 高清波多野结衣一区二区三区 | 99在线影院 | 免费观看欧美一级高清 | 伊人影院在线观看视频 | 国产色综合久久无码有码 | 美女又黄又免费视频 | 亚洲欧美专区 | 国产精品96久久久久久久 | 奇米在线影视 | 国产精品美女久久久久网 | 欧美亚洲另类综合 |