怎样在窗口上了一个部分运行word(50分)

阿李

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样在窗口上了一个部分运行word,就好像WPs reader那样的界面,我的要求是左边是treeveiw控件
右上方是一个listview控件,下面是一个Panel控件,我想在Panel里面运行word进行排版,但不能影响我其他的控件,也就是其他的控件还依然存在而不被覆盖,在对word操作的同时也要对其他控件进行一些操作
这应该怎么做,也就是怎么做一个查看word文件的程序,也要进行编辑。
 
放一个OLE控件。
 
能不能说一说具体的操作方法
 
怎样在窗口上了一个部分运行word,就好像WPs reader那样的界面,我的要求是左边是treeveiw控件
右上方是一个listview控件,下面是一个Panel控件,我想在Panel里面运行word进行排版,但不能影响我其他的控件,
也就是其他的控件还依然存在而不被覆盖,在对word操作的同时也要对其他控件进行一些操作
这应该怎么做,也就是怎么做一个查看word文件的程序,也要进行编辑,另外我要用一个按扭实现往当前的word送一些数据,比如一些表格中的数
 
很简单,在Panel里放一个OLEContainer控件就行了,然后将WordApplication、
WordDocument控件与OLEContainer连接就可以了。
 
SeaHawk,有几个操作?要设置哪几个属性?能不能再具体一点,我很急
 
首先用OleContainer.CreateObjectFromFile打开一个Word文档,然后用DoVerb激活(注意,
这点很重要),然后用WordApplication.Connect连接,再用WordDocument.Connectto方法
连接到文档,然后你就可以用WordDocument来操作活动文档了。
 
SeaHawk,怎样控制word操作界面只在Panel中而不占满整个form,
 
这个嘛,我没倒是有仔细研究过。不过只要你把你的Button、ComboBox都放在ToolBar上
就不会被覆盖。因为菜单要融合,所以我的界面基本上都在菜单栏下面的。
你或者可以用另一个Form,把OleContainer放到这个Form里面,然后把这个Form停靠到
主Form的Panel上。
 
SeaHawk,那我怎么实现word中数据的动态更新,就是我要动态地发送给word表格中的数据
 
你是用Word作报表吧,我刚好不久前作了一个。我的思路是在Word文档中需要动态更新的
地方插入标签,然后在WordDocument里查找标签,然后替换。表格可以动态生成,直接插
入。另外用一个XML文件保存和数据库对应的信息。这样几乎任意输出成各种报表。
对于WordDocument操作的方法,可以看Word的VB编程帮助,亦可以看看其他的帖子,
主要在OLE/Automation里面。
 
SeaHawk, 能不能发个范例给我
 
暂时不行。不过基本的原理你已经知道了,写起来很容易的。我用的系统是
W2k+D6+Word2000。其实D5里面也是一样,不过要处理XML的话,XML解析器
要用Import Type Library导入一次。

 
谢谢,不过还是有一些不明白,太抽象了
 
贴几段让你参考一下:

procedure TForm1.btnOpenClick(Sender: TObject);
var iLoop: integer;
vLoop: Olevariant;
s: String;

begin
if OpenFile.Execute Then
begin
s:= OpenFile.FileName;
if (Rightstr(OpenFile.FileName,3)='doc') or
(Rightstr(OpenFile.FileName,3)='dot') then 检查文件是否Word文档
begin
OleContainer1.Enabled:=true;
OleContainer1.CreateObjectFromFile(OpenFile.FileName,false);
OleContainer1.DoVerb(ovShow); //运行此句,才可以启动Word进程,才能让WordApp连上
WordApp.Connect;
WordApp.Tag:=9595; //作一个标记
WordDoc.ConnectTo(WordApp.ActiveDocument);
WordApp.CommandBars['Standard'].Set_Enabled(false); //将工具栏设为不可见
wordApp.CommandBars['Formatting'].Set_Enabled(false);
OleContainer1.DoVerb(ovShow); //运行此句让工具栏不再出现
btnOpen.Enabled:=false;
Form1.OnResize:=FormRizeDo;
for iLoop:=1 to Worddoc.Bookmarks.Count do //将标签加到ComboBox1中
begin
vLoop:=iLoop;
ComboBox1.Items.Add(Worddoc.Bookmarks.item(vLoop).name);

end;
btnChange.Enabled:=true;
btnEdit.Enabled:=true;
btnSave.Enabled:=true;
btnDone.Enabled:=true;
btnOk.Enabled:=false;
btnModify.Enabled:=false;

end;
end;
end;

procedure TForm1.btnOkClick(Sender: TObject);//建立对应的XML文件
var iLoop: integer;
InsertNode: IXMLNode;
rowNode: IXMLNode;
sItem: TListItem;
AttrValue: OleVariant;
begin
if ListView1.MultiSelect=true Then //ListView是数据表的Fieldname;
begin
if ListView1.SelCount>0 Then
begin
InsertNode:=XMLFormWork.CreateElement('插入表','');
AttrValue:=ComboBox1.Text;
InsertNode.SetAttribute('BMarkName',AttrValue);
AttrValue:=ComboBox2.Text;
InsertNode.SetAttribute('TableName',AttrValue);
sItem:=ListView1.Selected;
while sItem<>nil Do
begin
RowNode:=XMLFormWork.CreateElement('列','');
AttrValue:=sItem.Caption;
RowNode.SetAttribute('FieldName',AttrValue);
InsertNode.ChildNodes.Add(RowNode);
sItem:=ListView1.GetNextItem(sItem, sdAll, [isSelected]);
end;
if Not FindByAttr('BMarkName',ComboBox1.Text,XmlFormWork.ChildNodes.First.NextSibling) Then
XmlFormWork.ChildNodes.First.NextSibling.ChildNodes.Add(InsertNode);
end;
end else
begin
if ListView1.SelCount>0 Then
begin
InsertNode:=XMLFormWork.CreateElement('插入点','');
AttrValue:=ComboBox1.Text;
InsertNode.SetAttribute('BMarkName',AttrValue);
AttrValue:=ComboBox2.Text;
InsertNode.SetAttribute('TableName',AttrValue);
sItem:=ListView1.Selected;
AttrValue:=sItem.Caption;
InsertNode.SetAttribute('FieldName',AttrValue);
if Not FindByAttr('BMarkName',ComboBox1.Text,XmlFormWork.ChildNodes.First.NextSibling) Then
XmlFormWork.ChildNodes.First.NextSibling.ChildNodes.Add(InsertNode);

end;
end;
if XMLFormWork.ChildNodes.First.NextSibling.ChildNodes.Count = ComboBox1.Items.Count Then
Begin
if SaveFile.Execute Then XmlFormWork.SaveToFile(SaveFile.FileName);
end;
btnOk.Enabled:=false;
btnInsert.Enabled:=false;
btnInsertTable.Enabled:=false;
ComboBox1.Enabled:=true;
ListView1.Enabled:=false;
end;

 
我也遇到同类问题
 
顶部