主题:自己常用的调用EXCEL对象方法
moz
[专家分:37620] 发布于 2008-02-02 17:48:00
PROCEDURE CheckExcel
IF TYPE("Excel.name")="U"
release Excel
public Excel
TRY
Excel=GETOBJECT(,"Excel.application")
CATCH
try
Excel=CREATEOBJECT("Excel.application")
catch
messagebox("创建EXCEL对象失败")
endtry
ENDTRY
ENDIF
ENDPROC
最后更新于:2008-09-11 00:16:00
回复列表 (共15个回复)
沙发
lwh1188 [专家分:25840] 发布于 2008-02-03 01:20:00
支持楼主的贡献精神!
我常这样读取xls文件信息到dbf表:
c_file=book1.xls &&取xls文件名
eole=CREATEOBJECT('Excel.application') && 创建Excel对象
eole.Workbooks.Open("book1.xls") && 要打开的工作表名
eole.visible=.f. && 不显示Excel窗口
eole.WorkSheets(1).Activate &&激活工作簿1
nrows=eole.Worksheets('Sheet1')
UsedRange =nrows.UsedRange
lnRow = UsedRange.ROWS.COUNT &&获取的总行数(“有内容的”)
for i=4 to lnrow &&从第4行起读到最后一行
****
x1=alltrim(eole.Cells(i,1).value) &&取第i行第一列的值
x2=alltrim(eole.Cells(i,2).value) &&取第i行第二列的值
x3=alltrim(eole.Cells(i,3).value) &&取第i行第三列的值
**
INSERT INTO 表1 (编号,姓名,地址) VALUES (x1,x2,x3)
endfor
eole.Workbooks.close && 关闭工作簿
eole.quit && 退出Excel
我未加“创建EXCEL对象失败”的检查!
板凳
琅拿度 [专家分:2820] 发布于 2008-02-03 10:02:00
学习
3 楼
moz [专家分:37620] 发布于 2008-02-03 10:55:00
在使用VFP调用EXCEL过程中,时常有以下问题:
1. 调用EXCEL,但不要与用户正在使用的EXCEL混淆,
比如说,我要在程序中利用EXCEL的打印功能,
否则,万一创建之后,而用户却在中途退出了EXCEL,于是在打印处理的时候就要出错了.
[color=ff00ff]这里要说明一下,其实是不会出现这种情况的,用户退出了EXCEL,但事实上,内存中EXCEL对象还是存在的。但关键是别让用户把需要使用的文件关闭了才行[/color]
所以这个时候,需要创建一个独立的隐藏的EXCEL对象,以免被其他因素影响使用.
[color=ff00ff]可以把工作薄隐藏了就可以了[/color]
于是,应该使用 CreateObject( )
2. 调用EXCEL,但需要直观的交互功能.
我要在程序中生成一个是EXCEL表,
但因为很多原因,这个表也许不是最终结果,还需要其他人工手动完善,
这个时候,不能隐藏EXCEL.
假如这个过程是多次的,如果还使用创建对象,
会创建多个独立的EXCEL系统占用内存及CPU时间等资源造成浪费.
而且还不利于工作表数据在工作簿中的复制移动
所以,这个时候不能用CreateObject( ), 而应该用 GetObject( )
3. 如果系统原来并没有打开EXCEL, 而使用GetObject( )
会失败并发生错误.所以还得使用 CreateObject( )
于是,有了这一篇讨论.
4 楼
海军 [专家分:5350] 发布于 2008-02-03 11:13:00
谢谢楼主
5 楼
cbl518 [专家分:57140] 发布于 2008-02-03 13:06:00
TRY
Excel=GETOBJECT(,"Excel.application")
CATCH
try
Excel=CREATEOBJECT("Excel.application")
catch
messagebox("创建EXCEL对象失败")
l0=.T.
endtry
ENDTRY
if type("l0")="L"
retu
endif
6 楼
cbl518 [专家分:57140] 发布于 2008-02-04 03:34:00
LOCAL l0
ON ERROR l0=.T.
Excel=GETOBJECT(,"Excel.application")=
IF l0
l0=.F.
Excel=CREATEOBJECT("Excel.application")=
IF l0
messagebox("创建EXCEL对象失败")
ON ERROR
RETURN
ENDTRY
ENDIF
ON ERROR
7 楼
moz [专家分:37620] 发布于 2008-02-04 10:51:00
扑克中的王牌
8 楼
0901chang [专家分:10660] 发布于 2008-02-04 12:45:00
我习惯这样写:
if type('Excel')='O'
Excel=GETOBJECT(,"Excel.application")
else
Excel=CREATEOBJECT("Excel.application")
if .not.type('Excel')='O'
messagebox("创建EXCEL对象失败")
return
endi
endi
9 楼
moz [专家分:37620] 发布于 2008-02-04 19:49:00
这还像点儿样,只是需要一个全局变量。
但可能也会有点问题,是不是还需要用用 isnull( ) 函数会更安全些?
[color=ff00ff]补充:现在使用 type("Excel.name")
="C" 已有对象实例
="U" 没有对象引用[/color]
10 楼
cbl518 [专家分:57140] 发布于 2008-02-04 21:45:00
这样只判断对象是否实例化!
对 Excel 是否安装和是否启动,好像不能判断吧!
我来回复