回 帖 发 新 帖 刷新版面

主题:自己常用的调用EXCEL对象方法

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

回复列表 (共15个回复)

沙发

支持楼主的贡献精神!

我常这样读取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对象失败”的检查!

板凳

学习

3 楼

在使用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 楼

谢谢楼主

5 楼

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 楼


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 楼

扑克中的王牌

8 楼

我习惯这样写:
if type('Excel')='O'
 Excel=GETOBJECT(,"Excel.application")
else
 Excel=CREATEOBJECT("Excel.application")
 if .not.type('Excel')='O'
  messagebox("创建EXCEL对象失败")
  return
 endi
endi

9 楼

这还像点儿样,只是需要一个全局变量。

但可能也会有点问题,是不是还需要用用  isnull( ) 函数会更安全些?


[color=ff00ff]补充:现在使用 type("Excel.name")
="C" 已有对象实例
="U" 没有对象引用[/color]

10 楼

这样只判断对象是否实例化!
对 Excel 是否安装和是否启动,好像不能判断吧!

我来回复

您尚未登录,请登录后再回复。点此登录或注册