Анализ и создание файлов Microsoft Office 2007 (.docx, .xlsx, .pptx)

#php #python #perl #parsing #office-2007

Вопрос:

У меня есть веб-проект, в котором я должен импортировать текст и изображения из предоставленного пользователем документа, и одним из возможных форматов является Microsoft Office 2007. Также необходимо создавать документы в этом формате.

Сервер работает под управлением CentOS 5.2 и имеет установленный PHP/Perl/Python. Я могу выполнять локальные двоичные файлы и сценарии оболочки, если это необходимо. Мы используем Apache 2.2, но перейдем на Nginx, как только он заработает.

Какие у меня есть варианты? У кого-нибудь был опыт в этом деле?

Ответ №1:

Форматы файлов Office 2007 открыты и хорошо документированы. Грубо говоря, все новые форматы файлов, заканчивающиеся на «x», являются сжатыми XML-документами в формате zip. Например:

Чтобы открыть XML-файл Word 2007, создайте временную папку, в которой будет храниться файл и его части.

Сохраните документ Word 2007, содержащий текст, изображения и другие элементы, в виде файла .docx.

Добавьте расширение .zip в конец имени файла.

Дважды щелкните файл. Он откроется в приложении ZIP. Вы можете увидеть части, из которых состоит файл.

Извлеките детали в папку, которую вы создали ранее.

Другие форматы файлов примерно аналогичны. Я пока не знаю ни одной библиотеки с открытым исходным кодом для взаимодействия с ними, но, в зависимости от ваших конкретных требований, читать и писать простые документы не кажется слишком сложным. Конечно, это должно быть намного проще, чем в старых форматах.

Если вам нужно прочитать старые форматы, OpenOffice имеет API и может более или менее успешно читать и записывать документы Office 2003 и более старых версий.

Ответ №2:

Модуль python docx может генерировать отформатированные файлы Microsoft office docx из чистого Python. Из коробки он выполняет заголовки, абзацы, таблицы и маркеры, но модуль makeelement() может быть расширен для выполнения произвольных элементов, таких как изображения.

 from docx import *
document = newdocument()

# This location is where most document content lives 
docbody = document.xpath('/w:document/w:body',namespaces=wordnamespaces)[0]

# Append two headings
docbody.append(heading('Heading',1)  )   
docbody.append(heading('Subheading',2))
docbody.append(paragraph('Some text')
 

Ответ №3:

Я успешно использовал SDK формата OpenXML в проекте для изменения электронной таблицы Excel с помощью кода. Для этого потребуется .NET, и я не уверен, насколько хорошо он будет работать в Mono.

Ответ №4:

Вероятно, вы можете проверить код на Sphider. Это документы и PDF-файлы, так что я уверен, что они смогут их прочитать. Это также может привести вас в правильном направлении для других офисных форматов.