请问如何控制Word文档中插入的Excel对象(300分)

  • 主题发起人 主题发起人 cyr
  • 开始时间 开始时间
C

cyr

Unregistered / Unconfirmed
GUEST, unregistred user!
就是在Word文档中插入一个Excel表格,如何改变表格中的内容?
 
使用 DDE 试试
 
大哥啊,我都知道有VBA啦,就是怎么试都不成啊。
就是想看一个成功的语句啊,例如Word文档中的Excel表格中的一个单元赋值。
用DDE没有想过,试试看。
 
C++Builder5以下例子出现错误:
OleVariant i=1;
Edit1->Text = WordApplication1->ActiveDocument->Shapes->Item(i)->OLEFormat->ClassType;
错误提示:
'this->Item(Index, (Word_2k::ShapePtr*)&prop)':参数不正确。
 
同样语句在Delphi6下也出现错误。
i: OleVariant;
i:=1;
Edit1.Text := WordApplication1.ActiveDocument.Shapes.Item(i).OLEFormat.ClassType;
错误信息:
Project Project1.exe rasied exception class EOleException with message '不允许进入指定汇编中的索引.'
 
还是自己搞定,应该用InlineShapes属性。
 
var
exapp: OleVariant;

WordApplication1.ActiveDocument.InlineShapes.Item(1).OLEFormat.Activate;
exapp := WordApplication1.ActiveDocument.InlineShapes.Item(1).OLEFormat.Object_;
exapp.Application.Cells[2,2].Value := 'abcde';

 
如果采用ole/DDe控制word /Excel,例子网上好多。对于word中嵌入Excel,只要你看VBA help,你就马上搞点
 
cyr正在研究非常有趣的问题,这里补充他一下,一个小例子:
var
oleObj: OleVariant;
shp: InlineShape;
oleRef:OleFormat;
chartRef,ds: variant;
...

with OpWord.Server.ActiveDocument do
begin
if InLineShapes.Count>0 then
begin
ShowMessage(IntToStr(InLineShapes.Count)+' inline shapes');
shp := InLineShapes.Item(1);
oleRef := shp.OleFormat;
oleRef.Activate;
chartRef := oleRef.Object_;
ds := chartRef.Application.DataSheet;
x := ds.Range['A1','A1'];
y := x.Value;
ShowMessage('A1='+FloatToStr(y));
end;
end;
 
这才有点意思。
请教:OpWord是什么来的?
再请教:用Servers上的WordApplication控件打开不同的Word文档,如果第一次打开后用户
自行把Word关闭了,第二次打开时就会出现"RPC远程调用失败"的错误,用GetOleObject可以
确定Word是否运行,问题是,如果知道Word没有运行,该如何重新启动Word呢?
 
OpWord是一个通过Ole操作word的类,你可以把OpWord.Server.ActiveDocument 看成
wordapplication。ActiveDocument。
RPC远程调用失败是一个经典的问题,你可以用这个方法:
首先:
wordapplication1.Disconnect; //加上这句,确定断开连接
wordapplication1.Connect;
wordapplication1.ConnectKind := ckRunningOrNew;
WordApplication1.Visible := True;
wordapplication1.Documents.Open(FileName, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam,EmptyParam,EmptyParam);
然后:在wordapplication控件里有一个Onquit事件,他可以处理用户意外关闭word的问题
procedure TForm1.WordApplication1Quit(Sender: TObject);
begin
wordapplication1.Disconnect; //也加上这句
end;
这样应该可以解决你的问题了。不行可以再研究。
 
哈哈,果然是高手,我怀疑你是M$的人啊?[8D][8D][8D]
 
给分失败,再来
 
关键是
procedure TForm1.WordApplication1Quit(Sender: TObject);
begin
wordapplication1.Disconnect; //也加上这句
end;
 
首先:
wordapplication1.Disconnect; //加上这句,确定断开连接
加上这一句反而会影响程序的稳定性,如果用户第一次打开Word时没有关闭Word,
第二次重新打开Word时有时会出现错误。如果没有这一句程序稳定一些。
 
后退
顶部