首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

vfp控制两个excel表拷贝。解决思路

2012-04-09 
vfp控制两个excel表拷贝。代码如下:oexcel1 getOBJECT( ,excel.application)oexcel1.Workbooks.Open(

vfp控制两个excel表拷贝。
代码如下:
oexcel1= getOBJECT( '','excel.application')
oexcel1.Workbooks.Open( 'D:\Documents\Visual FoxPro 项目\分组排名测试\总分.xls' )

oexcel2= getOBJECT( '','excel.application')
oexcel2.Workbooks.Open( 'D:\Documents\Visual FoxPro 项目\分组排名测试\分组排名.xls' )

osheet1 = oexcel1.workbooks( '总分.xls').Sheets( 1 )
osheet2 = oexcel2.workbooks( '分组排名.xls').Worksheets( '分组排名' )

oexcel1.visible = .t.
oexcel2.visible = .t.

osheet2.Copy( osheet1, )

这段代码执行到最后,OLE提示出错,不能取得类worksheet的Copy属性。

但是如果把
oexcel2= getOBJECT( '','excel.application')
改成
oexcel2= getOBJECT( ,'excel.application')
又能顺利执行完成。

第一种方法两次加载Excel进程,第二种一次加载。
难道两次加载就不支持表拷贝?

我做过测试,在没有Excel进程已经加载的情况下getOBJECT( ,'excel.application')会报错终止。
实际工作中其实很难预测到哪个先启动、哪个后启动,所以倾向第一种方法,即各自加载,然后复制。

各位大虾有什么办法拉兄弟一把?



[解决办法]
示例:
_ole_excel = CreateObject("Excel.Application") 
_ole_excel.VISIBLE=.T.
_ole_excel.WorkBooks.Open('aa1.xls') && 要打开的工作表名(xls)必须是全路径 
_ole_excel.Sheets(2).CELLS.SELECT
_ole_excel.Selection.Copy
_ole_excel1 = CreateObject("Excel.Application") 
_ole_excel1.VISIBLE=.T.
_ole_excel1.WorkBooks.Open('a1.xls')
_ole_excel1.ActiveSheet.PASTE
[解决办法]
从 excel 编辑菜单的“移动或复制工作表”功能来看,只能是复制到一个新工作簿(对应无参数的的 Copy)中,或者同一个工作簿中其他工作表前后。
要完成你需要的操作,只能先复制工作表的内容,然后另一个工作簿中新建一工作表,并粘贴过去

[解决办法]
Copy是同1工作薄内,不同的要先COPY、再PASTE,代码 已经测试通过
[解决办法]
用一个进程就可以

oexcel1=Getobject('','excel.application')
oexcel1.Workbooks.Open('D:\Documents\Visual FoxPro 项目\分组排名测试\总分.xls')
oexcel1.Workbooks.Open('D:\Documents\Visual FoxPro 项目\分组排名测试\分组排名.xls')
oexcel1.Visible = .T.
oexcel1.workbooks('分组排名.xls').Worksheets('分组排名').Copy(oexcel1.workbooks('总分.xls').Sheets(1),)
[解决办法]

探讨
我的方法二和十豆三是一样的,能执行成功,同一进程不同工作簿是可以Copy的。
我只是因为实际编码的时候,两个工作簿不会在同一段代码里打开,谁先谁后也不一定,所以一定要分别GetObject()

我就是奇怪,为什么一定要同一个进程呢?VBA的帮助和MSDN都没有说过有这方面的限制啊。

热点排行