Как получить доступ к тексту объекта TextBox в документе Word, используя Ruby WIN32OLE - PullRequest
2 голосов
/ 12 декабря 2010

Я просто собрал небольшой сценарий для группы пользователей, который собирает все файлы 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 Ответ

3 голосов
/ 12 декабря 2010

Если предположить, что будет достаточно чего-то, эквивалентного doc.Sentences.each { |x| puts x.text }, но для текстовых полей, то это должно работать для вас:

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

Это выглядит немного более грязно, чем то, как вы проходили предложения, но1005 * вернет фактический текст, содержащийся в текстовых полях.

...