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%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%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% Laut der offiziellen Github-Dokumentation sollten Sie Use write_buffer instead open
. Es gibt auch ein Codebeispiel für den Link.
Tags und Links ruby-on-rails nokogiri docx rubyzip