vfp控制两个excel表拷贝。

不假思索 2012-02-29 10:29:52
代码如下:
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')会报错终止。
实际工作中其实很难预测到哪个先启动、哪个后启动,所以倾向第一种方法,即各自加载,然后复制。

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

...全文
278 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2012-02-29
  • 打赏
  • 举报
回复
用一个进程就可以

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),)
WWWWA 2012-02-29
  • 打赏
  • 举报
回复
Copy是同1工作薄内,不同的要先COPY、再PASTE,代码 已经测试通过
都市夜猫 2012-02-29
  • 打赏
  • 举报
回复
从 excel 编辑菜单的“移动或复制工作表”功能来看,只能是复制到一个新工作簿(对应无参数的的 Copy)中,或者同一个工作簿中其他工作表前后。
要完成你需要的操作,只能先复制工作表的内容,然后另一个工作簿中新建一工作表,并粘贴过去
WWWWA 2012-02-29
  • 打赏
  • 举报
回复
示例:
_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
不假思索 2012-02-29
  • 打赏
  • 举报
回复

嗯,是,这样好。
十豆三 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 powerwolf 的回复:]
我的方法二和十豆三是一样的,能执行成功,同一进程不同工作簿是可以Copy的。
我只是因为实际编码的时候,两个工作簿不会在同一段代码里打开,谁先谁后也不一定,所以一定要分别GetObject()

我就是奇怪,为什么一定要同一个进程呢?VBA的帮助和MSDN都没有说过有这方面的限制啊。
[/Quote]
你的实际代码不是在同一段中执行,那建议用只读方式打开你要 Copy 的表,也就是一个 xls 文件,被2段代码都打开了。
oexcel1.Workbooks.Open('D:\Documents\Visual FoxPro 项目\分组排名测试\总分.xls',NULL,.T.) && 只读方式打开
其实你可以不考虑这个 XLS 文件是否被另一段代码打开了,因为如果被打开了,再打开时会自动以只读方式打开的。
不假思索 2012-02-29
  • 打赏
  • 举报
回复

粘贴复制肯定行的通,但代码没有worksheet.copy来的精练。
不假思索 2012-02-29
  • 打赏
  • 举报
回复

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

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

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧