Ruby win32ole - 无法替换word文档中的文本

时间:2014-07-18 20:07:07

标签: ruby windows ms-word win32ole

我正在尝试替换文档中的文本,如下所示:

require 'win32ole'

def replace_doc(doc, find, repl)
    begin
        word = WIN32OLE.new('Word.Application')
        word.Visible = true
        doc = word.Documents.Open(doc)

        word.Selection.HomeKey(unit=6)
        finder = word.Selection.Find
        finder.Text = "[#{find}]"

        while word.Selection.Find.Execute
            word.Selection.TypeText(text=repl)
        end

        doc.SaveAs(doc)
        doc.Close
    rescue Exception => e
        puts e.message
        puts "Unable to edit file."
    end
end

def main()
    puts "File: "
    doc = gets.chomp()

    puts "Find: "
    find = gets.chomp()

    puts "Replace with: "
    repl = gets.chomp()

    replace_doc(doc, find, repl)
end

main()

我在Windows XP上运行Ruby 2.0。 WINWORD.exe进程启动(我在任务管理器中看到它),并且没有引发异常。但是,当我转到文档时,我希望不会替换任何文本 - 是。到底是怎么回事?我已经从here复制了代码(除了一些内容)。

1 个答案:

答案 0 :(得分:0)

如果没有您正在使用的实际word文档和输入数据,很难说,但我怀疑finder.Text中的方括号是您的问题。由于您的计划现在是,输入foo查找文字会在您的Word文档中搜索[foo],而不是foo。请注意,在您链接的帖子中。示例word文档中有实际的方括号(它包含[date]等。)