bcb操作word问题,请进(100分哦)

sevencat 2005-03-01 11:52:44
下面这段是用WordApplication控件操作word的,现在的问题是第一次运行打开word成功后关闭word,再点击运行这段,就会在下面的地方出问题,有说明
try
{
try
{
WordApplication->Connect();
}
catch(Exception &exception)
{
MessageDlg("Word可能没有安装或安装不正确!", mtError,
TMsgDlgButtons() << mbYes, 0);
Abort;
}
WordApplication->GetDefaultInterface()->Visible = True;
WordApplication->set_Caption(StringToOleStr("结果"));
WordApplication->Documents->Add(Template, NewTemplate);////到这出错,大概意思就是docunment指针有问题,但是不关闭word连续运行打开几个文档都没问题。
//Assign WordDocument component
WordDocument->ConnectTo(WordApplication->Documents->Item(ItemIndex));
//Turn Spell checking off because it takes a long time if enabled and slows down Winword
WordApplication->Options->CheckSpellingAsYouType = False;
WordApplication->Options->CheckGrammarAsYouType = False;
//Insert data
WordDocument->Sentences->Last->Paste();
}
catch(Exception &exception)
{
Application->ShowException(&exception);
WordApplication->Disconnect();
}
...全文
234 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sevencat 2005-03-01
  • 打赏
  • 举报
回复
分先给你了,找到答案告诉我一声,mail:angel-dream122@163.com
3996906 2005-03-01
  • 打赏
  • 举报
回复
O
我再看看
sevencat 2005-03-01
  • 打赏
  • 举报
回复
但是加这句这样是可以的,我之前就已经试过了。还有一种情况啊,我已经打开word的情况下,再点,这么写就出问题的,因为如果已经打开了不想把原来的关掉,只想再建一个文档。多谢
3996906 2005-03-01
  • 打赏
  • 举报
回复
列举句柄查是查得出来word是否运行了,不过有这个工夫还不如每次断开呢
3996906 2005-03-01
  • 打赏
  • 举报
回复
每次还是关吧

不关也不影响,自己会找到word连接上

你没办法让word关闭时通知你的应用程序断开连接
3996906 2005-03-01
  • 打赏
  • 举报
回复
在你这些代码前+一句就好了

WordApplication->Disconnect();

我的测试是

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//WordDocument->Disconnect();
WordApplication->Disconnect();

::OpenClipboard(this->Handle);
::EmptyClipboard();

AnsiString sReport = "test";
HGLOBAL h = GlobalAlloc(GHND|GMEM_SHARE, sReport.Length()+1);
strcpy((LPSTR)GlobalLock(h), sReport.c_str());
GlobalUnlock(h);

::SetClipboardData(CF_TEXT, h);
::CloseClipboard();

OleVariant Template = EmptyParam;
OleVariant NewTemplate = False;
OleVariant ItemIndex = 1;

try
{
try
{
WordApplication->Connect();
}
catch(Exception &exception)
{
MessageDlg("Word可能没有安装或安装不正确!", mtError,
TMsgDlgButtons() << mbYes, 0);
Abort;
}
//DocumentsPtr pTmp = WordApplication->get_Documents();
//WordApplication->Documents;
WordApplication->GetDefaultInterface()->Visible = True;
WordApplication->set_Caption(StringToOleStr("结果"));
WordApplication->Documents->Add(Template, NewTemplate);////到这出错,大概意思就是docunment指针有问题,但是不关闭word连续运行打开几个文档都没问题。
//Assign WordDocument component
WordDocument->ConnectTo(WordApplication->Documents->Item(ItemIndex));
//Turn Spell checking off because it takes a long time if enabled and slows down Winword
WordApplication->Options->CheckSpellingAsYouType = False;
WordApplication->Options->CheckGrammarAsYouType = False;
//Insert data
WordDocument->Sentences->Last->Paste();
}
catch(Exception &exception)
{
Application->ShowException(&exception);
WordApplication->Disconnect();
}
}
//---------------------------------------------------------------------------
sevencat 2005-03-01
  • 打赏
  • 举报
回复
其实就是我怎么知道word已经被运行了,问题出在那个Disconnect();关不关word的问题
constantine 2005-03-01
  • 打赏
  • 举报
回复
捧场
sevencat 2005-03-01
  • 打赏
  • 举报
回复
那多谢了,这是前面的一段,再前面就是收集数据,应该没什么关联的了
::OpenClipboard(this->Handle);
::EmptyClipboard();

HGLOBAL h = GlobalAlloc(GHND|GMEM_SHARE, sReport.Length()+1);
strcpy((LPSTR)GlobalLock(h), sReport.c_str());
GlobalUnlock(h);

::SetClipboardData(CF_TEXT, h);
::CloseClipboard();

OleVariant Template = EmptyParam;
OleVariant NewTemplate = False;
OleVariant ItemIndex = 1;
3996906 2005-03-01
  • 打赏
  • 举报
回复
Template和NewTemplate是怎么定义的啊?
3996906 2005-03-01
  • 打赏
  • 举报
回复
估计不是+不+分的问题,反正现在郁闷,给你看看代码先
sevencat 2005-03-01
  • 打赏
  • 举报
回复
a,没人答,我可以再加分~~

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧