发一个实用函数,word文件转换成文本文件(DocToTxt)
2008-07-16 15:20
579 查看
#include #include 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; } <===========================================> 函数已经经过测试,使用前先判断word是否安装 <===========================================>
相关文章推荐
- jacob 实现Office Word文件格式转换 docTotxt,docTopdf,docxTodoc,pdfTotxt ...
- jacob 实现Office Word文件格式转换 docTotxt,docTopdf,docxTodoc,pdfTotxt ...
- enca - 一个linux下面转换windows txt文件到linux下面可以查看txt的工具
- 老男孩教育每日一题-2017年5月4日-有一个oldboy.txt文件,把里面所有字母都转换成大写
- nodejs将PDF文件转换成txt文本,并利用python处理转换后的文本文件
- 编写一个\函数解决统计文件或目录大小并转换存储单位
- word2vec中的bin文件转换为txt 文件
- 怎样把一个Unicode码的_Txt转换为ansi码的_Txt文件
- C#File类常用的文件操作方法(创建、移动、删除、复制等) File类,是一个静态类,主要是来提供一些函数库用的。静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和
- 将文本文件中的数据读取到一个二维数组中,求出这些数据的中位数,然后求所有数据与中位数的差值的绝对值和,并求出和的最小值,最后把程序运行的结果写到一个txt文件中
- 从一个文件remianWord.txt中挑出另外一个文件allWord.txt自己的单词还不会的单词
- 用Python编写函数实现 创建一个.txt文件或者.doc文件
- Syncfusion Essential DocIO操作word文件实用函数
- 从一个名为 in_file.txt 的文本文件中读取单词,然后把每个词写到一个名为out_file.txt的输出文件中 并且每个词之间用空格分开
- 多年前写的一个小程序,可把目录下的txt文件转换为html文件
- 如何把一个TXT文本文件按行数分割成多个文本文件
- Word,PDF,PPT,TXT的转换
- ”黑马程序员“编写一个可以获取文件扩展名的函数,形参接收一个文件名字符串,返回一个扩展名字符串。
- shell命令实现txt文件转换为csv文件
- 一个在线互相转换文件的网站