设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

巧用剪切板导出包对象内的文件

2015-4-18 09:02| 发布者: tmtony| 查看: 1609| 评论: 4|原作者: ljw990485|来自: Office中国论坛

摘要: 本人做了一个系统,由多个含宏代码的工作薄组成,为了防止一些工作薄被用户删除,需要主工作薄内的代码能重建被删除的工作薄和其他文件(如Word文件),我使用了直接插入Excel工作薄和Word文档的方法,发现重新建立 ...
本人做了一个系统,由多个含宏代码的工作薄组成,为了防止一些工作薄被用户删除,需要主工作薄内的代码能重建被删除的工作薄和其他文件(如Word文件),我使用了直接插入Excel工作薄和Word文档的方法,发现重新建立其它文件时,使用OleObject,Object,Save或SaveAS的方法,有时工作正常,有时不正常,甚至引发Excel程序崩溃;另外这样插入对象,会导致主工作薄体积庞大。
    于是我就想到使用包对象来保存压缩后的其它文件,但代码取不到包对象OleObject,Object,就更谈不上使用OleObject,Object,Save或SaveAS的方法保存包对象内的文件了,搜索本BBS内的帖子,找不到相关帖子,经过一晚上的翻查,终于找到某版主的一个帖子,现在忘记在哪了,代码大概意思是:
1)先用OleObject.verb  xlVerbOpen打开包对象,
2)再对包对象程序Sendkeys,相当于执行包对象程序的菜单,然后关闭包对象程序
  作者本人对该程序也不太满意

在一次偶然的机会,我手动复制包对象,然后在资源管理器内粘帖,竟然能导出包对象的文件,于是写了一篇帖子
VBA巧妙使用资源管理器导出包对象的文件
http://club.excelhome.net/thread-395416-1-1.html
帖子内的方法是:
1)OleObject,Copy复制包对象到剪切板
2)程序使用Shell Explorer打开一个资源管理器,且到指定的目录
3)程序使用Sendkeys发按键Ctrl+V到资源管理器,使得资源管理器执行粘帖动作

以上方法也存在很大的毛病,依赖Explorer进程,并且程序执行期间,可能会受到用户键盘和鼠标操作影响,如用户按键或鼠标点击或其它程序,都可以使得Explorer进程不在前台,导致粘帖失败。所以这种方法也不好。

现在大家看到了希望了吧,呵呵,竟然资源管理器能粘帖,说明文件已经在剪切板内了,下面的事情就是分析剪切板的内容,经过分析,在包对象被复制后,剪切板内竟然有16种不同格式的东西,哪资源管理器究竟使用哪种格式执行粘帖呢?
   经过对比,发现是Native格式,但这个格式下的内容除了包含所导入的文件以外,还在前面包含很多比较复杂的信息,里面有包对象的标签名,所导入的文件全路径文件名以及该包含路径文件名字符串长度,文件长度等,有些信息到现在我还不明白什么意思,嘻嘻。
   剩下的事情就比较简单了,代码写好就OK,具体大家见附件吧,这种方法就完全克服了以上二种方法依赖使用SendKeys对外部程序操作带来的无序性。包对象内的文件是本BBS的那个收音机,我稍微改了一下。

    我所做的系统的包对象包含的是其它文件的压缩文件,至于怎么解压包对象内导出的,本人先是使用网络上广泛流传的方法:
1)先查找注册表找到WinRar的安装目录
2)使用Shell执行WinRar对包对象导出的压缩文件解压
   但本人发现这样的方法一样存在很大的问题,在一些能正常使用WinRar的计算机上竟然在注册表找不到WinRar的安装目录!此方法很依赖外部程序,加上Shell是异步执行方式,导致我们无法估计WinRar何时完成解压任务

   经过在网络上搜索,至于找到了一位俄罗斯人用VB写的压缩解压程序,虽然压缩率比WinRar低一点点,解压速度也没那么快,但它能保证程序在任何时候是已知状态,是可预测的。
   我的具体做法是:
   1)本人使用这个程序压缩其它文件,且分别导入几个包对象中,导入前,压缩后的文件文件名越短越好,并且考入一个驱动器的根目录下,且去掉包对象左边的图标和标签,这样就能保证包对象复制时,剪切板内多余的信息最少;
   2)把俄罗斯人写的程序改造,去掉压缩部分的程序,并且直接从内存中解压包对象内的文件,还原解压后的文件

这个就不发出来了吧,嘻嘻
导出包文件.rar

相关阅读

发表评论

最新评论

引用 danielwang2008 2009-2-23 13:25
顶!!!
引用 liwen 2009-3-9 16:02
学习了!
引用 fuzzyman17 2009-7-24 14:57
强人啊
引用 t小宝 2009-7-24 15:27
这个要学习

查看全部评论(4)

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-26 22:01 , Processed in 0.079116 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部