2012-08-30 64 views
0

我正在尝试跨越大量的.doc文件(大约200个文件)来查找和替换算法。在.doc批处理中查找/替换?

我需要找到并替换大约40个字符串。我需要定期执行这些操作,所以我觉得这将是一个非常好的案例来创建脚本。

  1. 是否可以通过单词完成此操作?
  2. 如果没有,是否可以用.batch文件做到这一点?
  3. 如果不是,我应该从哪里开始?
+0

您可以录制一个捕获您执行操作一次的宏。然后,您可以使用该vb代码并向其中添加更多代码,以批处理方式为整个目录做例子。 – PoeHaH

+0

您将在word中创建一个枚举文件的宏,打开它们,执行替换,然后将它们保存到磁盘。您不需要使用批处理文件,也不需要批处理文件自己完成此操作。 –

+0

@AlexK。你是说我应该通过微软的Word宏,程序内脚本来做所有事情吗? –

回答

1

唯一的非平凡位替换,但可拍摄&修改

Sub Foo() 
'path 
Const PATH As String = "C:\xxx\" 
Dim doc As Word.Document 
Dim fn As String: fn = Dir$(PATH & "*.doc") 
With Application 
    'loop matching files 
    Do While Len(fn) 
     'open 
     Set doc = .Documents.Open(PATH & fn) 
     'replace text 
     replaceInDoc doc, "OLD TEXT", "NEW TEXT" 
     replaceInDoc doc, "MORE OLD TEXT", "MORE NEW TEXT" 
     'save, close 
     doc.Save 
     doc.Close 
     'get next file 
     fn = Dir$() 
    Loop 
End With 
End Sub 

Sub replaceInDoc(doc As Word.Document, find As String, replaceWith As String) 
'do the replace 
With doc.Content.find 
    .Text = find 
    .Replacement.Text = replaceWith 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    .Execute replace:=wdReplaceAll 
End With 
End Sub 

显然这个测试在副本上。

+0

在这一行上:'Dim fn As String:fn = Dir $(PATH&“* .doc”)',还有什么方法可以通过子目录吗? –

+0

另外,这是什么语言?我想看看是否还有其他一些有用的功能。我想要查找和替换的一些字符串具有特殊的格式(例如,它们可以嵌套在表格中,而我想用另外的表格行替换)。 –

+0

其VBA;宏观语言。要查看所有子文件夹,您需要递归搜索; http://www.ammara.com/access_image_faq/recursive_folder_search.html - 您无法真正使用查找/替换来修改文档结构,这需要使用不同的代码来识别和编辑表 –

0

在我看来,有两种选择:

  1. 创建您自己的VBA脚本代码来做到这一点。您可以使用内置于VBA编辑器的MS Office帮助系统来了解您必须使用MS Word文档对象模型的哪些属性和功能才能完成此任务。

  2. 寻找和使用一些第三方的商业软件来完成这项工作。这项任务有不同厂商的几个程序。

第二种方法需要相当少的时间和精力。批处理文件不会完成这项工作,除非您设法通过OLE自动化控制MS Word以访问需要替换文本的文档。