Parsowanie i generowanie plików Microsoft Office 2007 (.docx,xlsx,pptx)

Mam projekt internetowy, w którym muszę importować tekst i obrazy z dokumentu dostarczonego przez użytkownika, a jednym z możliwych formatów jest Microsoft Office 2007. Istnieje również potrzeba generowania dokumentów w tym formacie.

Serwer działa CentOS 5.2 i ma zainstalowany PHP / Perl / Python. Mogę wykonywać lokalne binaria i skrypty powłoki, jeśli muszę. Używamy Apache 2.2, ale przełączymy się na Nginx po uruchomieniu.

Jakie mam opcje? Ktoś miał z tym doświadczenie?

Author: DV., 2008-10-06

4 answers

Formaty plików Office 2007 są otwarte i Dobrze udokumentowane . Z grubsza rzecz biorąc, wszystkie nowe formaty plików kończące się na " x " są skompresowanymi dokumentami XML zip. Na przykład:

Aby otworzyć plik XML Worda 2007 należy utworzyć folder tymczasowy, w którym można przechowywać plik i jego części.

Zapisz dokument Word 2007, zawierający tekst, zdjęcia i inne elementy, jak a .plik docx.

Dodaj a .rozszerzenie zip na koniec nazwa pliku.

Kliknij dwukrotnie plik. Otworzy się w aplikacja ZIP. Możesz zobaczyć części, które składają się na plik.

Wyodrębnij Części do folderu, który stworzyłeś wcześniej.

Inne formaty plików są mniej więcej podobne. Nie znam jeszcze żadnych bibliotek open source do interakcji z nimi - ale w zależności od twoich dokładnych wymagań, czytanie i pisanie prostych dokumentów nie wygląda na zbyt trudne. Na pewno powinno być o wiele łatwiejsze niż ze starszymi formaty.

Jeśli chcesz przeczytać starsze formaty, OpenOffice ma API i może czytać i pisać dokumenty Office 2003 i starsze z większym lub mniejszym powodzeniem.

 17
Author: 1800 INFORMATION,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 06:10:41

Moduł Python docx może generować sformatowane pliki Microsoft office docx z czystego Pythona. Po wyjęciu z pudełka robi nagłówki, akapity, tabele i punktory, ale moduł makeelement() może być rozszerzony o dowolne elementy, takie jak obrazy.

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')
 6
Author: mikemaccana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-30 12:13:58

Z powodzeniem użyłem OpenXML Format SDK w projekcie do modyfikacji arkusza Excela za pomocą kodu. Wymagałoby to. NET i nie jestem pewien, jak dobrze by to działało pod Mono.

 3
Author: Hafthor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 06:30:25

Prawdopodobnie możesz sprawdzić kod Sphider . Dokumenty i PDF-y, więc jestem pewien, że mogą je przeczytać. Może również poprowadzić Cię we właściwym kierunku dla innych formatów Office.

 2
Author: Darryl Hein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 05:56:07