用vc操作word,怎样获得word的总的页数? 查了很多资料,发现都是vb的,改成c++,根本就获取不了页数,有没有vc获得word的页数的例子? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网上不是有吗VC 如何得到打开word文件总页数 _Application WordApp; //代表WORD程序 Documents docs; //代表一个WORD程序里的所有文档 _Document doc; //代表一个文档 if(!WordApp.CreateDispatch("Word.Application",NULL))//创建一个新的word程序 { AfxMessageBox("创建ms_word服务失败,请确认是否安装WORD程序"); exit(1); } //让用户能够查看自动化的过程 WordApp.SetVisible(true); //让docs和word程序连接,docs代表word中所有文档 docs=WordApp.GetDocuments(); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); //用docs来打开一个文档,并将句柄返回给doc doc=docs.Add(COleVariant(strOpenFileName),covOptional,covOptional,covOptional); 详见:http://topic.csdn.net/t/20031025/12/2393763.htmlhttp://topic.csdn.net/t/20031025/12/2393763.html 上面写的都不是啊,只是打开word而已, 有没有人真正实现过? http://www.vckbase.com/document/viewdoc/?id=832 Range rng; Selection sSel; #define wdFieldPage 33 #define wdFieldNumPages 26 COleVariant vwdFieldPage(long(wdFieldPage)),vwdFieldNumPages(long(wdFieldNumPages)); Cell cel; Window wActive; View vActive; HeaderFooter head; Fields fds; fds = sSel.GetFields(); rng = sSel.GetRange(); fds.Add(rng,vwdFieldNumPages,vOne,vOne); fds = sSel.GetFields(); rng = sSel.GetRange(); fds.Add(rng,vwdFieldPage,vOne,vOne); wActive = sApp.GetActiveWindow(); vActive = wActive.GetView(); int GetWordPageCount(LPCOLESTR lpszFileName){ CLSID clsid; LCID lcid = GetThreadLocale(); IDispatch *dispApp, *dispDocuments, *dispDocument, *dispWindow, *dispPane, *dispPages; LPOLESTR dispName; DISPID dispID = 0, dispidNamed = 0; DISPPARAMS dispParams = { 0 }; VARIANT vResult = { 0 }, vValue = { 0 }; CLSIDFromProgID(L"Word.Application", &clsid); CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (LPVOID *)&dispApp); //App.Visible = TRUE dispName = L"Visible"; dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID); dispidNamed = DISPID_PROPERTYPUT; vValue.vt = VT_BOOL; vValue.boolVal = TRUE; dispParams.cArgs = 1; dispParams.rgvarg = &vValue; dispParams.cNamedArgs = 1; dispParams.rgdispidNamedArgs = &dispidNamed; dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYPUT, &dispParams, &vResult, NULL, NULL); //Documents = App.Documents dispName = L"Documents"; dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID); dispParams.cArgs = 0; dispParams.rgvarg = NULL; dispParams.cNamedArgs = 0; dispParams.rgdispidNamedArgs = NULL; dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL); dispDocuments = vResult.pdispVal; dispApp->Release(); //Document = Documnets.Open(lpszFileName); dispName = L"Open"; dispDocuments->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID); vValue.vt = VT_BSTR; vValue.bstrVal = SysAllocString(lpszFileName); dispParams.cArgs = 1; dispParams.rgvarg = &vValue; dispParams.cNamedArgs = 0; dispParams.rgdispidNamedArgs = NULL; dispDocuments->Invoke(dispID, IID_NULL, lcid, DISPATCH_METHOD, &dispParams, &vResult, NULL, NULL); SysFreeString(vValue.bstrVal); dispDocument = vResult.pdispVal; dispDocuments->Release(); //Window = Documnet.ActiveWindow dispName = L"ActiveWindow"; dispDocument->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID); dispParams.cArgs = 0; dispParams.rgvarg = NULL; dispParams.cNamedArgs = 0; dispParams.rgdispidNamedArgs = NULL; dispDocument->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL); dispWindow = vResult.pdispVal; dispDocument->Release(); //Pane = Window.ActivePane dispName = L"ActivePane"; dispWindow->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID); dispParams.cArgs = 0; dispParams.rgvarg = NULL; dispParams.cNamedArgs = 0; dispParams.rgdispidNamedArgs = NULL; dispWindow->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL); dispPane = vResult.pdispVal; dispWindow->Release(); //Pages = Pane.Pages dispName = L"Pages"; dispPane->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID); dispParams.cArgs = 0; dispParams.rgvarg = NULL; dispParams.cNamedArgs = 0; dispParams.rgdispidNamedArgs = NULL; dispPane->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL); dispPages = vResult.pdispVal; dispPane->Release(); //return Pages.Count dispName = L"Count"; dispPages->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID); dispParams.cArgs = 0; dispParams.rgvarg = NULL; dispParams.cNamedArgs = 0; dispParams.rgdispidNamedArgs = NULL; dispPages->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL); dispPages->Release(); return vResult.intVal;} 从CListCtrl获取数据,在图片框按数据画点,画线 闹挺,散分 一个关于编辑框的问题 CDC类函数画好的曲线怎么提取它的坐标 我问一个 关于工具条 下拉箭头的 问题 图像缩放问题, 高手请进 DLL输出重定位之后的编译警告,快来看看!!! 请问在程序里用什么函数判断Socks代理和http代理是否可用? 如何截获CRichEditCtrl中文字拖拽开始和结束的消息!天哪!有人见死不救!! ms flex grid 改变列距 请教动态生成脚本的问题 在vb中向vc的dll传递一个int值为:5,再用dll把值返回,发现就不是5了
VC 如何得到打开word文件总页数 _Application WordApp; //代表WORD程序
Documents docs; //代表一个WORD程序里的所有文档
_Document doc; //代表一个文档
if(!WordApp.CreateDispatch("Word.Application",NULL))//创建一个新的word程序
{
AfxMessageBox("创建ms_word服务失败,请确认是否安装WORD程序");
exit(1);
}
//让用户能够查看自动化的过程
WordApp.SetVisible(true);
//让docs和word程序连接,docs代表word中所有文档
docs=WordApp.GetDocuments();
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
//用docs来打开一个文档,并将句柄返回给doc
doc=docs.Add(COleVariant(strOpenFileName),covOptional,covOptional,covOptional); 详见:
http://topic.csdn.net/t/20031025/12/2393763.html
http://topic.csdn.net/t/20031025/12/2393763.html
Range rng;
Selection sSel;
#define wdFieldPage 33
#define wdFieldNumPages 26
COleVariant vwdFieldPage(long(wdFieldPage)),vwdFieldNumPages(long(wdFieldNumPages));
Cell cel;
Window wActive;
View vActive;
HeaderFooter head;
Fields fds;
fds = sSel.GetFields();
rng = sSel.GetRange();
fds.Add(rng,vwdFieldNumPages,vOne,vOne);
fds = sSel.GetFields();
rng = sSel.GetRange();
fds.Add(rng,vwdFieldPage,vOne,vOne);
wActive = sApp.GetActiveWindow();
vActive = wActive.GetView();
{
CLSID clsid;
LCID lcid = GetThreadLocale();
IDispatch *dispApp, *dispDocuments, *dispDocument, *dispWindow, *dispPane, *dispPages;
LPOLESTR dispName;
DISPID dispID = 0, dispidNamed = 0;
DISPPARAMS dispParams = { 0 };
VARIANT vResult = { 0 }, vValue = { 0 };
CLSIDFromProgID(L"Word.Application", &clsid);
CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (LPVOID *)&dispApp); //App.Visible = TRUE
dispName = L"Visible";
dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispidNamed = DISPID_PROPERTYPUT;
vValue.vt = VT_BOOL;
vValue.boolVal = TRUE;
dispParams.cArgs = 1;
dispParams.rgvarg = &vValue;
dispParams.cNamedArgs = 1;
dispParams.rgdispidNamedArgs = &dispidNamed;
dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYPUT, &dispParams, &vResult, NULL, NULL); //Documents = App.Documents
dispName = L"Documents";
dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispDocuments = vResult.pdispVal;
dispApp->Release(); //Document = Documnets.Open(lpszFileName);
dispName = L"Open";
dispDocuments->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
vValue.vt = VT_BSTR;
vValue.bstrVal = SysAllocString(lpszFileName);
dispParams.cArgs = 1;
dispParams.rgvarg = &vValue;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispDocuments->Invoke(dispID, IID_NULL, lcid, DISPATCH_METHOD, &dispParams, &vResult, NULL, NULL);
SysFreeString(vValue.bstrVal);
dispDocument = vResult.pdispVal;
dispDocuments->Release(); //Window = Documnet.ActiveWindow
dispName = L"ActiveWindow";
dispDocument->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispDocument->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispWindow = vResult.pdispVal;
dispDocument->Release(); //Pane = Window.ActivePane
dispName = L"ActivePane";
dispWindow->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispWindow->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispPane = vResult.pdispVal;
dispWindow->Release();
//Pages = Pane.Pages
dispName = L"Pages";
dispPane->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispPane->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispPages = vResult.pdispVal;
dispPane->Release();
//return Pages.Count
dispName = L"Count";
dispPages->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispPages->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispPages->Release();
return vResult.intVal;
}