So bearbeiten Sie docx mit Nokogiri und Rubyzip

8

Ich verwende eine Kombination aus Rubyzip und Nokogiri, um eine .docx-Datei zu bearbeiten. Ich benutze Rubyzip, um die .docx Datei zu entpacken und nokogiri zu verwenden, um den Text der Datei word / document.xml zu analysieren und zu ändern, aber immer wenn ich rubyzip schließe, korrumpiert er die Datei und ich kann sie nicht öffnen oder repariere es. Ich entzippe die .docx-Datei auf dem Desktop und überprüfe die Datei "word / document.xml" und der Inhalt wird auf das aktualisiert, was ich geändert habe, aber alle anderen Dateien sind durcheinander. Könnte mir jemand bei diesem Problem helfen? Hier ist mein Code:

%Vor%     
Delvin VanNorman 07.10.2010, 20:00
quelle

3 Antworten

12

Ich habe letzte Nacht das gleiche Korruptionsproblem mit Rubyzip bekommen. Ich löste es, indem ich alles in eine neue Zip-Datei kopierte und die Dateien nach Bedarf ersetzte.

Hier ist mein funktionierender Proof of Concept:

%Vor%     
Eric Mason 12.01.2011 14:27
quelle
1

Ich bin über die Post gestolpert und weiß nichts über Ruby oder Nokogiri, aber ...

Es sieht so aus, als würden Sie den neuen Inhalt falsch rezipieren. Ich weiß nichts über Rubyzip, aber Sie müssen einen Weg finden, es zu ändern, um den Eintrag word / document.xml zu aktualisieren und dann die Datei erneut speichern / erneut komprimieren.

Es sieht so aus, als würden Sie den Eintrag einfach mit neuen Daten überschreiben, die natürlich eine andere Größe haben und den Rest der Zip-Datei total vermasseln.

Ich gebe ein Beispiel für Excel in diesem Post Parsen Sie eine Textdatei und erstellen Sie einen Excel-Bericht

was nützlich sein kann, auch wenn ich eine andere zip-Bibliothek und VB verwende (ich mache immer noch genau das, was du versuchst zu tun, mein Code ist ungefähr halb unten)

Hier ist der Teil, der zutrifft

%Vor%     
Poker Villain 08.11.2010 16:37
quelle
1

Laut der offiziellen Github-Dokumentation sollten Sie Use write_buffer instead open . Es gibt auch ein Codebeispiel für den Link.

    
Waynn Lue 01.02.2014 02:22
quelle