vc把文字内容存成word文件和把doc文件保存为txt格式

2024-03-03 20:08

本文主要是介绍vc把文字内容存成word文件和把doc文件保存为txt格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.vc把文字内容存成word文件

#include <ole2.h>
#include <stdio.h>

void ErrHandler(HRESULT hr, EXCEPINFO excep)
{
    if(hr==DISP_E_EXCEPTION)
    {
        char errDesc[512];
        char errMsg[512];
        wcstombs(errDesc, excep.bstrDescription, 512);
        sprintf(errMsg, "Run-time error %d:/n/n %s",
                excep.scode & 0x0000FFFF,  //Lower 16-bits of SCODE
                errDesc);                  //Text error description
        ::MessageBox(NULL, errMsg, "Server Error", MB_SETFOREGROUND |
                     MB_OK);
    }
    else
    {
        LPVOID lpMsgBuf;
        ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                        FORMAT_MESSAGE_FROM_SYSTEM |
                        FORMAT_MESSAGE_IGNORE_INSERTS, NULL, hr,
                        MAKELANGID(LANG_NEUTRAL,
                        SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,
                        0, NULL);
        ::MessageBox(NULL, (LPCTSTR)lpMsgBuf, "COM Error",
                     MB_OK | MB_SETFOREGROUND);
        ::LocalFree( lpMsgBuf );
    }

}

int main(int argc, char* argv[])
{

    // ******************* Declare Some Variables ********************

    // Variables that will be used and re-used in our calls
    DISPPARAMS dpNoArgs = {NULL, NULL, 0, 0};
    VARIANT vResult;
    OLECHAR FAR* szFunction;
    BSTR bstrTemp;

    // IDispatch pointers for Word's objects
    IDispatch* pDispDocs;      //Documents collection
    IDispatch* pDispSel;       //Selection object
    IDispatch* pDispActiveDoc; //ActiveDocument object

    // DISPID's
    DISPID dispid_Docs;        //Documents property of Application object
    DISPID dispid_DocsAdd;     //Add method of Documents collection
                               //object
    DISPID dispid_Sel;         //Selection property of Applicaiton object
    DISPID dispid_TypeText;    //TypeText method of Selection object
    DISPID dispid_TypePara;    //TypeParagraph method of Selection object
    DISPID dispid_ActiveDoc;   //ActiveDocument property of Application
                               //obj
    DISPID dispid_SaveAs;      //SaveAs method of the Document object
    DISPID dispid_Quit;        //Quit method of the Application object

    // ******************** Start Automation ***********************

    //Initialize the COM libraries
    ::CoInitialize(NULL);

    // Create an instance of the Word application and obtain the pointer
    // to the application's IDispatch interface.
    CLSID clsid;
    CLSIDFromProgID(L"Word.Application", &clsid);

    IUnknown* pUnk;
    HRESULT hr = ::CoCreateInstance( clsid, NULL, CLSCTX_SERVER,
                                     IID_IUnknown, (void**) &pUnk);
    IDispatch* pDispApp;
    hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDispApp);

    // Get IDispatch* for the Documents collection object
    szFunction = OLESTR("Documents");
    hr = pDispApp->GetIDsOfNames (IID_NULL, &szFunction, 1,
                                  LOCALE_USER_DEFAULT, &dispid_Docs);
    hr = pDispApp->Invoke (dispid_Docs, IID_NULL, LOCALE_USER_DEFAULT,
                           DISPATCH_PROPERTYGET, &dpNoArgs, &vResult,
                           NULL, NULL);
    pDispDocs = vResult.pdispVal;

    // Invoke the Add method on the Documents collection object
    // to create a new document in Word
    // Note that the Add method can take up to 3 arguments, all of which
    // are optional. We are not passing it any so we are using an empty
    // DISPPARAMS structure
    szFunction = OLESTR("Add");
    hr = pDispDocs->GetIDsOfNames(IID_NULL, &szFunction, 1,
                                  LOCALE_USER_DEFAULT, &dispid_DocsAdd);
    hr = pDispDocs->Invoke(dispid_DocsAdd, IID_NULL, LOCALE_USER_DEFAULT,
                           DISPATCH_METHOD, &dpNoArgs, &vResult, NULL,
                           NULL);


    // Get IDispatch* for the Selection object
    szFunction = OLESTR("Selection");
    hr = pDispApp->GetIDsOfNames (IID_NULL, &szFunction, 1,
                                  LOCALE_USER_DEFAULT, &dispid_Sel);
    hr = pDispApp->Invoke (dispid_Sel, IID_NULL, LOCALE_USER_DEFAULT,
                           DISPATCH_PROPERTYGET, &dpNoArgs, &vResult,
                           NULL, NULL);
    pDispSel = vResult.pdispVal;


    // Get the DISPIDs of the TypeText and TypeParagraph methods of the
    // Selection object.  We'll use these DISPIDs multiple times.
    szFunction = OLESTR("TypeText");
    hr = pDispSel->GetIDsOfNames(IID_NULL, &szFunction, 1,
                                  LOCALE_USER_DEFAULT, &dispid_TypeText);

    szFunction = OLESTR("TypeParagraph");
    hr = pDispSel->GetIDsOfNames(IID_NULL, &szFunction, 1,
                                  LOCALE_USER_DEFAULT, &dispid_TypePara);

    // The TypeText method has and requires only one argument, a string,
    // so set up the DISPPARAMS accordingly
    VARIANT vArgsTypeText[1];
    DISPPARAMS dpTypeText;

    bstrTemp = ::SysAllocString(OLESTR("One"));
    vArgsTypeText [0].vt = VT_BSTR;
    vArgsTypeText [0].bstrVal = bstrTemp;
    dpTypeText.cArgs = 1;
    dpTypeText.cNamedArgs = 0;
    dpTypeText.rgvarg = vArgsTypeText;

    //Invoke the first TypeText and TypeParagraph pair
    hr = pDispSel->Invoke (dispid_TypeText, IID_NULL,
                           LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                           &dpTypeText, NULL, NULL, NULL);
    hr = pDispSel->Invoke (dispid_TypePara, IID_NULL,
                           LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                           &dpNoArgs, NULL, NULL, NULL);
    ::SysFreeString(bstrTemp);

    //Invoke the second TypeText and TypeParagraph pair
    bstrTemp = ::SysAllocString(OLESTR("Two"));
    hr = pDispSel->Invoke (dispid_TypeText, IID_NULL,
                           LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                           &dpTypeText, NULL, NULL, NULL);
    hr = pDispSel->Invoke (dispid_TypePara, IID_NULL,
                           LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                           &dpNoArgs, NULL, NULL, NULL);
    ::SysFreeString(bstrTemp);

    //Invoke the third TypeText and TypeParagraph pair
    bstrTemp = ::SysAllocString(OLESTR("Three"));
    hr = pDispSel->Invoke (dispid_TypeText, IID_NULL,
                           LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                           &dpTypeText, NULL, NULL, NULL);
    hr = pDispSel->Invoke (dispid_TypePara, IID_NULL,
                           LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                           &dpNoArgs, NULL, NULL, NULL);
    ::SysFreeString(bstrTemp);

    // Get IDispatch* for the ActiveDocument object
    szFunction = OLESTR("ActiveDocument");
    hr = pDispApp->GetIDsOfNames (IID_NULL, &szFunction, 1,
                                  LOCALE_USER_DEFAULT,
                                  &dispid_ActiveDoc);
    hr = pDispApp->Invoke (dispid_ActiveDoc, IID_NULL,
                           LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET,
                           &dpNoArgs, &vResult, NULL, NULL);
    pDispActiveDoc = vResult.pdispVal;

    //Set up the DISPPARAMS for the SaveAs method (11 arguments)
    VARIANT vArgsSaveAs[11];
    DISPPARAMS dpSaveAs;
    dpSaveAs.cArgs = 11;
    dpSaveAs.cNamedArgs = 0;
    dpSaveAs.rgvarg = vArgsSaveAs;

    BSTR bstrEmptyString;
    bstrEmptyString = ::SysAllocString(OLESTR(""));

    VARIANT vFalse;
    vFalse.vt = VT_BOOL;
    vFalse.boolVal = FALSE;

    //TRY THIS:
    //To see the error handler in action, change the following
    //line to:
    //
    //     bstrTemp = ::SysAllocString(OLESTR("c://badpath//doc1.doc"));
    bstrTemp = ::SysAllocString(OLESTR("c://doc1.doc"));

    //TRY THIS:
    //To see the error handler in action, change the following
    //line to:
    //
    //   vArgsSaveAs[10].vt = VT_I4;       
    vArgsSaveAs[10].vt = VT_BSTR;       
    vArgsSaveAs[10].bstrVal = bstrTemp;        //Filename
    vArgsSaveAs[9].vt = VT_I4;          
    vArgsSaveAs[9].lVal = 0;                   //FileFormat
    vArgsSaveAs[8] = vFalse;                   //LockComments
    vArgsSaveAs[7].vt = VT_BSTR;
    vArgsSaveAs[7].bstrVal = bstrEmptyString;  //Password
    vArgsSaveAs[6].vt = VT_BOOL;    
    vArgsSaveAs[6].boolVal = TRUE;             //AddToRecentFiles
    vArgsSaveAs[5].vt = VT_BSTR;
    vArgsSaveAs[5].bstrVal = bstrEmptyString;  //WritePassword
    vArgsSaveAs[4] = vFalse;                   //ReadOnlyRecommended
    vArgsSaveAs[3] = vFalse;                   //EmbedTrueTypeFonts
    vArgsSaveAs[2] = vFalse;                   //SaveNativePictureFormat
    vArgsSaveAs[1] = vFalse;                   //SaveFormsData
    vArgsSaveAs[0] = vFalse;                   //SaveAsOCELetter


    //Invoke the SaveAs method
    szFunction = OLESTR("SaveAs");
    hr = pDispActiveDoc->GetIDsOfNames(IID_NULL, &szFunction, 1,
                                  LOCALE_USER_DEFAULT, &dispid_SaveAs);
    EXCEPINFO excep;
    hr = pDispActiveDoc->Invoke(dispid_SaveAs, IID_NULL,
                                LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                                &dpSaveAs, NULL, &excep, NULL);
    if (FAILED(hr))
    {
        ErrHandler(hr, excep);
    }

    ::SysFreeString(bstrEmptyString);

    //Invoke the Quit method
    szFunction = OLESTR("Quit");
    hr = pDispApp->GetIDsOfNames(IID_NULL, &szFunction, 1,
                                 LOCALE_USER_DEFAULT, &dispid_Quit);
    hr = pDispApp->Invoke (dispid_Quit, IID_NULL, LOCALE_USER_DEFAULT,
                           DISPATCH_METHOD, &dpNoArgs, NULL, NULL, NULL);

    //Clean-up
    ::SysFreeString(bstrTemp);
    pDispActiveDoc->Release();
    pDispSel->Release();
    pDispDocs->Release();
    pDispApp->Release();
    pUnk->Release();

    ::CoUninitialize();

    return 0;

}

2.vc把word文件转成txt文件(好获取word文件的文字内容)

#include <ole2.h>
#include <stdio.h>

void DocToTxt(BSTR bstrOpenFile, BSTR bstrSaveFile);
void DocToTxt(BSTR bstrOpenFile, BSTR bstrSaveFile)
{
    // ******************* Declare Some Variables ********************

    // Variables that will be used and re-used in our calls
    DISPPARAMS        m_dpNoArgs = {NULL, NULL, 0, 0};
    VARIANT            m_vResult;
    OLECHAR FAR*    m_szFunction;

    // IDispatch pointers for Word's objects
    IDispatch*        m_pDispDocs;          //Documents collection
    IDispatch*        m_pDispActiveDoc;      //ActiveDocument object

    // DISPID's
    DISPID            m_dispid_Docs;        //Documents property of Application object
    DISPID            m_dispid_ActiveDoc;   //ActiveDocument property of Application
    DISPID            m_dispid_SaveAs;      //SaveAs method of the Document object
    DISPID            m_dispid_Quit;        //Quit method of the Application object

    DISPID            m_dispid_Open;          //Open method of the Application object
    BSTR            m_bstrEmptyString ;

    // ******************** Start Automation ***********************

    //Initialize the COM libraries
    ::CoInitialize(NULL);

    // Create an instance of the Word application and obtain the pointer
    // to the application's IDispatch interface.
    CLSID    m_clsid;
    CLSIDFromProgID(L"Word.Application", &m_clsid);

    IUnknown*    m_pUnk;
    HRESULT m_hr = ::CoCreateInstance( m_clsid, NULL, CLSCTX_SERVER,
                                       IID_IUnknown, (void**) &m_pUnk);
    IDispatch*    m_pDispApp;
    m_hr = m_pUnk->QueryInterface( IID_IDispatch, (void**)&m_pDispApp);

    // Get IDispatch* for the Documents collection object
    m_szFunction = OLESTR("Documents");
    m_hr = m_pDispApp->GetIDsOfNames (IID_NULL, &m_szFunction, 1,
                                      LOCALE_USER_DEFAULT, &m_dispid_Docs);
    m_hr = m_pDispApp->Invoke (m_dispid_Docs, IID_NULL, LOCALE_USER_DEFAULT,
                               DISPATCH_PROPERTYGET, &m_dpNoArgs, &m_vResult,
                               NULL, NULL);
    m_pDispDocs = m_vResult.pdispVal;

    // Query id of method open
    m_szFunction = OLESTR("Open");
    m_hr = m_pDispDocs->GetIDsOfNames(IID_NULL, &m_szFunction,1,
                                      LOCALE_USER_DEFAULT, &m_dispid_Open);

    // Prepare parameters for open method
    VARIANT        vArgsOpen[6];
    DISPPARAMS    dpOpen;
    dpOpen.cArgs        = 6;
    dpOpen.cNamedArgs   = 0;
    dpOpen.rgvarg        = vArgsOpen;

    VARIANT        vFalse, vTrue;
    vFalse.vt            = VT_BOOL;
    vFalse.boolVal        = FALSE;
    vTrue.vt            = VT_BOOL;
    vTrue.boolVal        = TRUE;


    m_bstrEmptyString = ::SysAllocString(OLESTR("")) ;

    vArgsOpen[5].vt            = VT_BSTR;
    vArgsOpen[5].bstrVal    = bstrOpenFile;
    vArgsOpen[4]            = vFalse;
    vArgsOpen[3]            = vTrue;
    vArgsOpen[2]            = vFalse;
    vArgsOpen[1].vt            = VT_BSTR;
    vArgsOpen[1].bstrVal    = m_bstrEmptyString;
    vArgsOpen[0].vt            = VT_BSTR;
    vArgsOpen[0].bstrVal    = m_bstrEmptyString;

    //Execute open method
    m_hr=m_pDispDocs->Invoke(m_dispid_Open,IID_NULL,LOCALE_USER_DEFAULT,
                             DISPATCH_METHOD,&dpOpen,NULL,NULL,NULL);

    //Query activedocument interface
    m_szFunction = OLESTR("ActiveDocument");
    m_hr = m_pDispApp->GetIDsOfNames(IID_NULL, &m_szFunction, 1,
                                     LOCALE_USER_DEFAULT,&m_dispid_ActiveDoc);
    m_hr = m_pDispApp->Invoke(m_dispid_ActiveDoc,IID_NULL,
                              LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET,
                              &m_dpNoArgs,&m_vResult,NULL,NULL);
    m_pDispActiveDoc = m_vResult.pdispVal;

    //Prepare arguments for save as .txt
    VARIANT            vArgsSaveAs[11];
    DISPPARAMS        dpSaveAs;
    dpSaveAs.cArgs            =   11;
    dpSaveAs.cNamedArgs        =   0;
    dpSaveAs.rgvarg            =   vArgsSaveAs;

    vArgsSaveAs[10].vt        =   VT_BSTR;
    vArgsSaveAs[10].bstrVal =    bstrSaveFile;        //Filename
    vArgsSaveAs[9].vt        =   VT_I4;
    vArgsSaveAs[9].lVal        =   2;                  //FileFormat(wdFormatText = 2)
    vArgsSaveAs[8]            =   vFalse;                //LockComments
    vArgsSaveAs[7].vt        =   VT_BSTR;
    vArgsSaveAs[7].bstrVal  =   m_bstrEmptyString;  //Password
    vArgsSaveAs[6].vt        =   VT_BOOL;
    vArgsSaveAs[6].boolVal  =   TRUE;               //AddToRecentFiles
    vArgsSaveAs[5].vt        =   VT_BSTR;
    vArgsSaveAs[5].bstrVal  =   m_bstrEmptyString;  //WritePassword
    vArgsSaveAs[4]            =   vFalse;             //ReadOnlyRecommended
    vArgsSaveAs[3]            =   vFalse;             //EmbedTrueTypeFonts
    vArgsSaveAs[2]            =   vFalse;             //SaveNativePictureFormat
    vArgsSaveAs[1]            =   vFalse;             //SaveFormsData
    vArgsSaveAs[0]            =   vFalse;                //SaveAsOCELetter

    // Query and execute SaveAs method
    m_szFunction = OLESTR("SaveAs");
    m_hr = m_pDispActiveDoc->GetIDsOfNames(IID_NULL,&m_szFunction,1,
                                           LOCALE_USER_DEFAULT,&m_dispid_SaveAs);
    m_hr = m_pDispActiveDoc->Invoke(m_dispid_SaveAs, IID_NULL,
                                    LOCALE_USER_DEFAULT,DISPATCH_METHOD,
                                    &dpSaveAs,NULL,NULL,NULL);
    // Invoke the Quit method
    m_szFunction = OLESTR("Quit");
    m_hr = m_pDispApp->GetIDsOfNames(IID_NULL, &m_szFunction, 1,
                                     LOCALE_USER_DEFAULT, &m_dispid_Quit);
    m_hr = m_pDispApp->Invoke(m_dispid_Quit, IID_NULL, LOCALE_USER_DEFAULT,
                              DISPATCH_METHOD, &m_dpNoArgs, NULL, NULL, NULL);

    //Clean-up
    ::SysFreeString(bstrOpenFile) ;
    ::SysFreeString(bstrSaveFile) ;
    ::SysFreeString(m_bstrEmptyString) ;

    m_pDispActiveDoc->Release();
    m_pDispDocs->Release();
    m_pDispApp->Release();
    m_pUnk->Release();

    ::CoUninitialize();
}
int main(int argc, char* argv[])
{
    BSTR str1,str2 ;
    str1 = ::SysAllocString(OLESTR("C://doc1.doc"));
    str2 = ::SysAllocString(OLESTR("C://doc1.txt"));
    DocToTxt(str1,str2);
    return 0;
}

 

转自:https://blog.csdn.net/lujianxin1098/article/details/5801182

这篇关于vc把文字内容存成word文件和把doc文件保存为txt格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/770762

相关文章

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使