复制粘贴的快捷键,干掉烦人的Office粘贴复制

Trouble:
在office使用过程中,我们为了让多个文件表示某一个具体信息的内容一致,经常会产生很多烦人的Copy Paste工作.如在A.doc文件中,存在这样的文字"由小红,小白和小张负责整个项目策划和执行",当在一个*.doc文件中或者多个word文档中同时提到这一信息时,这就带来了一个潜在的麻烦,那就是当负责人变化时,如小白因为忽然情况,不能作为整个项目的一个负责人,怎么办,通常工作人员需要找到所有提到这个项目负责人的文档,然后do a lot of Copy And Paste.这无疑是一个灾难性的工作,这样的事情无声无响的发生在我们周围.心细一点你会发现,这种现象发生的平率如此之高.高到搞行政的朋友想要自杀.本文从技术的角度记录如何解放那些office工作人员,要做成具体的解决方案还需要加上其他的花壳.
Solution:
有句话叫Where there is a trouble,there is a solution.LOL
OK,开个玩笑.针对上面提出的问题,我们来来设想我们的解决方案.不知道大家是否清楚office里面的模版机制.也就是*.dot和*.dotm文件,我们在电脑上建的每一个文件都有基于模版的派生品,通常情况下是normal.dotm,在office2010里面我们可以从File选项卡中的Info属性,然后点击Show All Properties里面,你就会看到Template.dotm,这就是word默认的模版.如果我们需要所有的文档能够远离上面提出来的Trouble,那么你只需要改一下你们公司创建文件所使用的模版就可以了.
关于office模版等等其他的东西这里不做阐述,本文只提供解决方案.要解决这个问题,我们可以分两步走,第一步就是实现替换,然后就是跨文件操作.
一.替换:
关于替换我曾经选型使用模版法,如<<姓名>>然后通过VBA使用正则表达式来替换,正则式使用的是<<([^\>>]+)>>,可能是因为我是个程序员的缘故,我没有首先考虑使用书签,当然也夹杂从用户的角度考虑,毕竟使用书签比加个<<符号麻烦.最后做到一半发现了一个问题,那就是我的一个.doc文档,在经历过一次替换后就不能二次替换了,因为替换一次后,符号"<<"会消失.最后,在经历了无数挣扎后,终于用书签实现了,使用书签法进行替换我们很直接的想到
ActiveDocument.Bookmarks("BookmarkName").Range.Text = "Hello world"
可是神奇的office虽然把BookmarkName下的文本替换了,但是BookmarkName这个书签就不见了,也就是说不能进行二次替换.在
尝试使用了Range后发现还是解决不了,最后在一篇老外的文章上终于找到了解决方案,
Dim bmRange As Range Set bmRange = ActiveDocument.Bookmarks("BookmarkName").Range bmRange.Text = "Inserted Text" ActiveDocument.Bookmarks.Add _ Name:="BookmarkName", _ Range:=bmRange
这段代码能改让你在不删除书签的前提下替换书签内容,这是本解决方案的一个核心功能.Ok,方案通了就OK了.
二.跨文件操作:
跨文件操作我原来设想的情况是当我们替换别的问件时,word程序界面会一个一个的起来,并且内存的占用一步一步加大,当文件数>10时基本就会奔溃,但是当我实践的时候,我惊奇的发现,word application的窗口没有弹出来,资源的占用也不高,天哪,居然这么平滑的就实现了多文件的替换工作,太nice了!!
下面我贴一段跨文件操作的代码,ReplaceBookMark(location As String, bookmarkname As String, value As String)其中location可以是一个文件夹,这个方法会找到此文件夹下的所有*.doc文件(如果你存的是*.docx,需要改下源代码),然后根据你提供的书签名来替换内容,并且可以n次替换,这个书签永远不会丢失.
'location 如 "C:\Users\administrator\Desktop\testpro\" Sub ReplaceBookMark(location As String, bookmarkname As String, value As String) Dim sFileName As String Dim sPath As String Dim wAppli As Object Dim worDoc As Document _disibledevent=> "" '如果找到指定文件 Set worDoc = wAppli.Documents.Open(sPath & sFileName) '将此文件打开 Set bmRange = worDoc.Bookmarks(bookmarkname).Range bmRange.Text = value worDoc.Bookmarks.Add _ Name:=bookmarkname, _ Range:=bmRange worDoc.Save '保存文件 worDoc.Close '关闭文件 sFileName = Dir '重新指定文件名 Loop Set worDoc = Nothing '清除对象内容 wAppli.Quit Set wAppli = Nothing Application.ScreenUpdating = True End Sub
上面的代码逻辑肯定是对的,可能会有需要改的地方,不过应该问题不大,我在公司测试是可以通过的,刚为了写文章改动了一下,也不知道还work不work,不过基本的东西全在这了.
基于上面这两个步骤,其实我们可以开发更多的运用,可以让这个过程更加的平滑.可能是后知后觉,我发现office的二次开发真的可以do everything.
Tags:  不能复制粘贴 复制粘贴 复制粘贴的快捷键

延伸阅读

最新评论

发表评论