VC++ MFC 打开word文档的问题

问题描述:是这样,我想编写一个程序,打开word文档,看了教程自己做,之后问题出来了,关键代码如下:if(!WordApp.CreateDispatch("Word.Ap... 问题描述:
是这样,我想编写一个程序,打开word文档,看了教程自己做,之后问题出来了,关键代码如下:

if(!WordApp.CreateDispatch("Word.Application",NULL))
{
AfxMessageBox("创建MS-Word服务失败!");
exit(1);
}

这是在判断能否成功创建word文档, 但是结果是怎么也创建不成功,
也就是说:AfxMessageBox("创建MS-Word服务失败!");这条语句总是得到执行的机会,
程序是编译成功的,没有问题,求大侠解释,万分感激!
补充一下,我的电脑装的是office 2003

用reporterror()方法找了一下,提示没有注册类。

真的很急,大牛们如果不愿意回答,那RMB怎么样?395935519qq,价格详谈
展开
 我来答
何处淬吴钩
推荐于2016-01-07 · TA获得超过5044个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2407万
展开全部
#include "stdafx.h"

#pragma warning(disable:4259)
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\Office11\\MSO.DLL" rename("IAccessible", "msoIAccessible")
using namespace Office;
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
//using namespace VBIDE;
#import "d:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" rename("ExitWindows","WordExitWindows")
using namespace Word;
#include <atlbase.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(0);
{
_ApplicationPtr m_WordPtr;
DocumentsPtr m_DocsPtr;
_DocumentPtr m_DocPtr;
HRESULT hr;
try{
//CLSID sid;
//CLSIDFromProgID(L"word.application",&sid);
hr=m_WordPtr.CreateInstance(__uuidof(Application));

m_WordPtr->put_Visible(VARIANT_TRUE);
m_DocPtr=m_WordPtr->Documents->Add();

LPSTR a = "c:\\22.doc";
CComBSTR b = a;
BSTR c = b.m_str;
VARIANT va;
va.vt = VT_BSTR;
va.bstrVal = c;
m_WordPtr->Documents->Open(&va);
SelectionPtr sel=m_WordPtr->GetSelection();
sel->TypeText(_bstr_t("sadsaS12as"));
sel->MoveEnd();
InlineShapePtr sh=sel->GetInlineShapes()->AddPicture(_bstr_t("c:\\1.jpg"));
sel->SetRange(1,2);
//sel->TypeText(_bstr_t("!!!!!!!"));
_bstr_t text=sel->GetText();
char *s=_com_util::ConvertBSTRToString(text);
cout<<s<<endl;

TablesPtr tables = sel->GetTables();
TablePtr table = tables->Add(sel->GetRange(), 2, 5);
BordersPtr bords = table->GetBorders();
bords->PutOutsideLineStyle(wdLineStyleSingle);
bords->PutOutsideLineWidth(wdLineWidth150pt);
bords->PutInsideLineStyle(wdLineStyleSingle);
for (int i = 1; i<=2; i++)
{
for (int j = 1; j<=5; j++)
{
table->Cell(i,j)->GetRange()->PutText("20");
}
}
CellPtr cell = table->Cell(1,1);
cell->Merge(table->Cell(1,2));

sel->Delete();
m_WordPtr->GetActiveDocument()->SaveAs(&CComVariant("c:\\1.doc"));
//m_WordPtr->Quit();
}
catch(_com_error *e)
{
MessageBox(NULL, "haha ", "no word ",MB_OK);
return -1;
}
}
CoUninitialize();
return 0;

}

把导入库改为你的word配置的正确路径即可
更多追问追答
追问
import方法比较繁琐,大侠有没有com的方法描述。
追答
这不是com是什么?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
系释娇00
2012-04-07
知道答主
回答量:13
采纳率:0%
帮助的人:4.7万
展开全部
网上找个现成的例子先跟踪学习一下,原因可能很多。
首先WordApp是否正确。 程序初始化需要有ole部分初始化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MTNHan
2012-04-08 · TA获得超过915个赞
知道小有建树答主
回答量:633
采纳率:0%
帮助的人:571万
展开全部
之前有没有
CoInitialize(NULL);
追问
有的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-07
展开全部
用shellexecute可以打开任意程序,网站都可以哈。http://baike.baidu.com/view/1044533.html?wtp=tt这是讲解网址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-08
展开全部
你VC好不好,可以加入94610914帮大家解决问题吗?
追问
我也很菜
追答
呵呵...彼此彼此...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式