Открытие файлов .doc в Ruby

#ruby-on-rails #ruby #ms-office

#ruby-on-rails #ruby #ms-office

Вопрос:

Могу ли я открыть файл .doc и получить содержимое этого файла с помощью Ruby?

Комментарии:

1. Привет, Джейсон, твой вопрос открыт уже очень долгое время, ты нашел решение? хотели бы вы принять один из ответов?

Ответ №1:

Если вам нужно только текстовое содержимое, возможно, вы захотите взглянуть на Yomu. Это драгоценный камень, который действует как оболочка для Apache TIKA и поддерживает множество форматов документов, включая следующие:

  • Форматы Microsoft Office OLE 2 и Office Open XML (.doc, .docx, .xls, .xlsx, .ppt, .pptx)
  • OpenOffice.org Форматы открытых документов (.odt, .ods, .odp)
  • Форматы Apple iWorks
  • Формат Rich Text (.rtf)
  • Переносимый формат документа (.pdf)

Ответ №2:

Gem docx очень прост в использовании

 require 'docx'

puts Docx::Document.open('test.docx')
  

или

 d = Docx::Document.open('test.docx')
d.each_paragraph do |p|
  puts p
end
  

вы можете найти это на https://github.com/chrahunt/docx и установите его с помощью gem install docx

однако docx не поддерживает файлы .doc (Word 2007 и более ранние версии), тогда вы можете использовать WIN32OLE следующим образом:

 require 'win32ole'

begin
  word = WIN32OLE.connect('Word.Application')
  doc = word.ActiveDocument
rescue
  word = WIN32OLE.new('word.application')
  path_open = 'C:Users...test.doc' #yes: backslashes in windows
  doc = word.Documents.Open(path_open)
end

word.visible = true
doc.Sentences.each { |x| puts x.text }
  

Комментарии:

1. можете ли вы написать название драгоценного камня, который используется в вашем примере кода?

2. вы можете найти это на github.com/chrahunt/docx и установите его с помощью gem install docx

3. Спасибо, я пытаюсь сейчас! Возникла небольшая проблема с синтаксическим анализом nokogiri: «Nokogiri::XML::XPath::SyntaxError: неопределенный префикс пространства имен: //w:document//w:body//w:p »

4. Но как насчет синтаксического анализа файлов «.doc» MS Word 2004?

5. Теперь я вижу ошибку — неизвестный OLE-сервер: `Word. Приложение’ 🙁

Ответ №3:

Да и нет

В Ruby вы можете сделать что-то вроде:

 thedoc = `externalProgram some_file`
  

Итак, что вам нужно, так это хорошая внешняя программа.

Вы могли бы взглянуть на библиотеку программного обеспечения wv или на программу antiword (по-видимому, не обновленную недавно).Я полагаю, что есть и другие. OpenOffice может читать файлы doc и экспортировать текстовые файлы, поэтому управление OO через CLI, вероятно, также будет работать.

Ответ №4:

Если вы используете Windows, это будет работать: http://www.ruby-doc.org/stdlib/libdoc/win32ole/rdoc/classes/WIN32OLE.html

Ответ №5:

Недавно я разбирался с этим в проекте и обнаружил, что мне нужна более легкая библиотека для получения текста из файлов .doc, .docx и .pdf. DocRipper использует комбинацию инструментов командной строки Antiword, grep и Poppler / pdftotext для извлечения текстового содержимого из файлов и возврата их в виде строки utf-8.

 dr = DocRipper::TextRipper.new('/path/to/file')
dr.text
=> "Document's text"