51Testing软件测试论坛

标题: 保存excel文件,在本机上都能调试通过,相同的代码在别的机子上就不能通过!! [打印本页]

作者: wscqb    时间: 2011-5-27 09:06
标题: 保存excel文件,在本机上都能调试通过,相同的代码在别的机子上就不能通过!!
保存excel文件,在本机上都能调试通过,相同的代码在别的机子上就不能通过!!
每次都是在   ObjExcel.Save SavePath  报错,说类的方法不正确
具体代码如下,请高手能指点下,郁闷死了
                set ObjExcel=GetObject("","excel.Application")
                Set fso=CreateObject("scripting.FileSystemObject")
                ObjExcel.Visible=false
                SavePath="E:\test.xls"     
                                                                    '导出的历史数据存储路径
                    If fso.FileExists(SavePath)=True Then
                        fso.DeleteFile(SavePath)
                 end if
                ObjExcel.Save SavePath
                ObjExcel.quit
                Set fso=nothing
                Set ObjExcel=nothing
作者: 风雪夜归人    时间: 2011-5-27 10:50
路径问题?或者是E:\test.xls已经存在了?
office版本不同?
作者: wscqb    时间: 2011-5-27 14:01
我上面的代码中有对文件是否存在的处理,如果存在就先删除,所以也不是路径和文件的问题
还有一个情况是这样:我把这代码段放到我软件脚本中去运行,也是报错,软件运行的环境都没有变(还是我自己的机子)
所以这个也不是office的版本不同的问题

哎,现在头都大了,被这个问题卡了两天了  
作者: lyscser    时间: 2011-5-27 14:59
本帖最后由 lyscser 于 2011-5-27 15:00 编辑

在本机可能是删除失败了才导致运行成功的,Save是覆盖保存,应该是应用于保存已经打开文件的修改,新存是SaveAs的吧
具体函数参见下面这个(截取一个函数的一部分,注意注释):


  1.         Set fObject = CreateObject("Scripting.FileSystemObject")        
  2.         If         Not fObject.FileExists(appointedFile) Then
  3.                   Repor micFail,"参数文件不存在:",appointedFile
  4.                   Set fObject = Nothing
  5.         End If
  6.         
  7.         If        fObject.FileExists(tmpName) Then
  8.                   fObject.DeleteFile(tmpName)
  9.         End If
  10.         
  11.         Set ExcelApp = CreateObject("Excel.Application")
  12.         ExcelApp.Application.Visible = False
  13.         ExcelApp.DisplayAlerts = False
  14.         Set newBook = ExcelApp.Workbooks.Open (appointedFile,False,True)--只读模式
  15.         newBook.Worksheets(appointedSheet).Copy
  16.         Set tempBook = ExcelApp.ActiveWorkbook        
  17.         tempBook.SaveAs tmpName,1--保存成xls格式
  18.         Set tempBook = Nothing
  19.         ExcelApp.Quit
  20.         Set ExcelApp = Nothing
  21.         DataTable.AddSheet newSheet
  22.         DataTable.ImportSheet tmpName,appointedSheet,newSheet
  23.         
  24.         If         fObject.FileExists(tmpName) Then
  25.                   fObject.DeleteFile(tmpName)
  26.         End If
复制代码

作者: wscqb    时间: 2011-5-27 17:05
但是使用  ObjExcel.SaveAs SavePath  系统提示
ObjExcel这个对象不支持这样的方法
作者: wscqb    时间: 2011-5-27 17:08
而且我有几次调试的时候,这个路径下文件是空的,使用save也是能保存文件的
所以我想应该不是你说的那个问题
作者: lyscser    时间: 2011-5-28 15:30
tempBook.SaveAs tmpName,1--保存成xls格式
作者: wscqb    时间: 2011-5-30 14:50
还是不行,我怀疑,应该上我上面的那段代码在我软件运行过程中没有真正得到那个excel的对象,所以在对该对象进行操作的时候就会出错。
但是为什么单独就这块代码段就可以运行通过,而且也是能正确执行相关操作呢

非常的崩溃
作者: wscqb    时间: 2011-5-30 15:01
自己顶一下,高手帮忙啊
作者: wscqb    时间: 2011-5-30 16:41

有高手出手相救没
作者: ljj149850508    时间: 2011-6-7 16:45
本帖最后由 ljj149850508 于 2011-6-7 17:55 编辑

你的EXCLE进程没有关闭。。
fso.close()
创建了文件流,不去关闭。。该进程一直存在。。导致报错。。
作者: sunnyswu    时间: 2011-6-8 21:58
set ObjExcel=GetObject("","excel.Application")
修改为 createobject()
因为这存在一个你本机打开了excel进程的问题,而其他机子没有打开此进程。
猜测啊 可以实验下




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2