如何使用Ruby WIN32OLE访问Word文档中的TextBox对象文本

时间:2010-12-11 23:00:15

标签: ruby object textbox ms-word win32ole

我只为一个用户团队整理了一个小脚本,该脚本收集目录中的所有PDF和DOC *文件并解析它们的超链接。 PDF部分按预期工作,但是我为设计提供的Word文档(纯文本)与它们使用的实际Word文档(文本在TextBox元素中)不同。

我注意到当我尝试从这些新文件中收集句子/单词时,我收到的只是文件背景图像的文本(通常是一个特殊字符)。

我浏览了API并尝试了ole_methods中列出的相当多的方法,但还没有找到一种方法来访问TextBox以从中提取所需的文本。

我知道我可以将Word文件转换为PDF并以这种方式快捷方式(经过测试和验证),但这需要相当多的文件管理,我想避免代替更简单的解决方案:访问文本。

您可以使用“绘制文本框”功能(Word 2007+)复制文档中的元素。

有没有人知道如何访问此元素,或者更好地查找文档中的所有文本,无论它位于何种元素中?

require 'win32ole'
word = WIN32OLE.new('Word.Application')
doc = word.Documents.Open(file)
doc.Sentences.each { |x| puts x.text }
  • 亚当

1 个答案:

答案 0 :(得分:3)

假设相当于doc.Sentences.each { |x| puts x.text }的东西,但对于文本框就足够了,那么这应该适合你:

doc.Shapes.each do |x|
  puts x.TextFrame.TextRange.text
end

它看起来比你通过句子的方式有点麻烦,但x.TextFrame.TextRange.text将返回文本框中包含的实际文本。