#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"