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,价格详谈 展开
是这样,我想编写一个程序,打开word文档,看了教程自己做,之后问题出来了,关键代码如下:
if(!WordApp.CreateDispatch("Word.Application",NULL))
{
AfxMessageBox("创建MS-Word服务失败!");
exit(1);
}
这是在判断能否成功创建word文档, 但是结果是怎么也创建不成功,
也就是说:AfxMessageBox("创建MS-Word服务失败!");这条语句总是得到执行的机会,
程序是编译成功的,没有问题,求大侠解释,万分感激!
补充一下,我的电脑装的是office 2003
用reporterror()方法找了一下,提示没有注册类。
真的很急,大牛们如果不愿意回答,那RMB怎么样?395935519qq,价格详谈 展开
5个回答
展开全部
#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配置的正确路径即可
#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是什么?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
网上找个现成的例子先跟踪学习一下,原因可能很多。
首先WordApp是否正确。 程序初始化需要有ole部分初始化。
首先WordApp是否正确。 程序初始化需要有ole部分初始化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
之前有没有
CoInitialize(NULL);
CoInitialize(NULL);
追问
有的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-04-07
展开全部
用shellexecute可以打开任意程序,网站都可以哈。http://baike.baidu.com/view/1044533.html?wtp=tt这是讲解网址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-04-08
展开全部
你VC好不好,可以加入94610914帮大家解决问题吗?
追问
我也很菜
追答
呵呵...彼此彼此...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询