为什么总是报错EoleError?(50分)

  • 主题发起人 主题发起人 Serena
  • 开始时间 开始时间
S

Serena

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一段程序
var ExcelApp: Variant;
begin
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.WorkBooks.Add( mainform.excel_path+'模版01-1.xls');
ExcelApp.SaveAs(mainform.excel_path+'temp.xls');
就会报错, Method 'SaveAs' not support by automation object.
还有用到其他的一些命令也会出现这种错误.
 
错误信息的意思是:
Excel.Application没有saveas方法. 其实如果用CreateOleObject来控制
Excel,最简单的一个方法就是在Excel中先生成相应的宏.
根据宏你可以知道该方法是属于什么对象的. 然后在Delphi中生成相应对象,
按宏改写delphi的代码即可.

procedure TForm1.Button1Click(Sender: TObject);
var
ExcelApp: Variant;
begin
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.WorkBooks.Add('e:/book1.xls');
ExcelApp.ActiveWorkbook.SaveAs('e:/temp.xls');
end;
 
to :bluerain
你的意思我没有搞明白,需要我在excel中写宏吗?
我直接把那句话改成了
ExcelApp.ActiveWorkbook.SaveAs(mainform.excel_path+'temp.xls');就没有报错了.
是不是这样就行了呢?
这个在delphi的帮助里面都没有嘛.在ExcelApp后面加了点之后都不会有提示的.
 
你可以在Excel里先录制宏,把你要做的事录下来,
然后根据Excel自动生成的代码改成Delphi的代码。
 
我的意思是用CreateOleObject方法控制Excel代码编写的一个方法.
将你要进行的Excel操作,在Excel中录制一个宏,例如你上面的saveas操作,
在Excel中的宏是
ActiveWorkbook.SaveAs Filename:="E:/temp1.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
那么你就知道你的Excel代码的错误在什么地方了,也就是saveas是ActiveWorkBook或者
是WorkBook的方法.这样你就可以相应的在Delphi中知道为什么错了.
我并不是说完成操作要用宏.

另外: 我不知道你有没有试过录制宏和用过Excel的Visual Basic编辑器.
当你录制完宏后,可以进入Visual Basic编辑器,视图菜单中有个对象浏览器,对
你写代码很有用.可以查询什么方法,属性是属于什么对象的.用用看,就知道了.

>>这个在delphi的帮助里面都没有嘛.在ExcelApp后面加了点之后都不会有提示的.
因为你的ExcelApp是Variant对象,所以Delphi是将他看成Varinat类型的,所以
点了之后当然就不会有提示的. 如果你用Delphi Server页上的一些Excel控件,
例如TExcelApplication,TExcelWorkBook,点了之后就会有提示了.
至于用Server上的控件和用CreateOleObject生成对象用法的区别你可以看看
OleAutomation版的一些帖子.
yzhshi大侠有一个十分详细的帖子,自己找找看.

 
两个方法:1录制宏,2查看以前的帖子
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
948
import
I
I
回复
0
查看
610
import
I
I
回复
0
查看
544
import
I
后退
顶部