Ich versuche, eine Excel-Datei (xlsx) programmgesteuert zu ändern. Ich kann das XMP erfolgreich dekomprimieren, modifizieren und neu komprimieren. Allerdings bekomme ich immer eine Warnung, wenn ich Excel öffne, obwohl es die Datei liest. Ich glaube, der Fehler ist auf die verwendete Komprimierungsmethode zurückzuführen. Dies ist ein Beispiel für die nächste, die ich bekommen kann:Komprimierungsmethode für xlsx mit 7z
Dekomprimieren
7z x original.xlsx -o./decomp_xlsx
..Do some stuff ..
Compress
7z a -tzip new ./decomp_xlsx/*
umbenennen
mv ./new.zip ./new.xlsx
Der Fehler ich bekomme ich s: Excel hat in 'new.xlsx' nicht lesbaren Inhalt gefunden. Möchten Sie den Inhalt dieser Arbeitsmappe wiederherstellen? Wenn Sie der Quelle dieser Arbeitsmappe vertrauen, klicken Sie auf Ja.
Von ECMA-376-2 Office Open Formats Teil 2 (Verpackungskonventionen) Der unterstützte Komprimierungsalgorithmus ist DEFLATE, wie in der .ZIP-Spezifikation beschrieben. Der Paketierungsimplementierer darf keinen anderen Komprimierungsalgorithmus als DEFLATE verwenden.
Also, welche Schalter muss ich in 7z oder anderen Linux-kompatiblen Programm verwenden, um den Job ohne die Warnung zu erledigen? Ich habe versucht, den -tzip fallen zu lassen und -m0 = COPY zu verwenden, aber Excel kann nicht einmal von diesem wiederherstellen.
Also hier ist das Ergebnis des ZIP-Programms und zipinfo. Ich schätze, ich werde kein anderes Tool finden, als das unten angegebene, also werde ich diese Antwort vergeben und sehen, ob ich jemanden finden kann, der python zum Testen übersetzt. I "m nicht sicher, ob es die Unterschiede zwischen dem 4.5/3.0 behandelt, dann b-/tx oder DEFs/Deff though.
$ zipinfo original.xlsx
Archive: original.xlsx
Zip file size: 228039 bytes, number of entries: 20
-rw---- 4.5 fat 1969 b- defS 80-Jan-01 00:00 [Content_Types].xml
-rw---- 4.5 fat 588 b- defS 80-Jan-01 00:00 _rels/.rels
-rw---- 4.5 fat 1408 b- defS 80-Jan-01 00:00 xl/_rels/workbook.xml.rels
-rw---- 4.5 fat 908 b- defS 80-Jan-01 00:00 xl/workbook.xml
-rw---- 4.5 fat 35772 b- defS 80-Jan-01 00:00 xl/worksheets/sheet4.xml
-rw---- 4.5 fat 322 b- defS 80-Jan-01 00:00 xl/worksheets/_rels/sheet4.xml.rels
-rw---- 4.5 fat 322 b- defS 80-Jan-01 00:00 xl/worksheets/_rels/sheet1.xml.rels
-rw---- 4.5 fat 230959 b- defS 80-Jan-01 00:00 xl/worksheets/sheet2.xml
-rw---- 4.5 fat 263127 b- defS 80-Jan-01 00:00 xl/worksheets/sheet3.xml
-rw---- 4.5 fat 295775 b- defS 80-Jan-01 00:00 xl/worksheets/sheet1.xml
-rw---- 4.5 fat 1947 b- defS 80-Jan-01 00:00 xl/sharedStrings.xml
-rw---- 4.5 fat 22698 b- defS 80-Jan-01 00:00 xl/styles.xml
-rw---- 4.5 fat 7079 b- defS 80-Jan-01 00:00 xl/theme/theme1.xml
-rw---- 4.5 fat 220 b- defS 80-Jan-01 00:00 xl/printerSettings/printerSettings2.bin
-rw---- 4.5 fat 464247 b- defS 80-Jan-01 00:00 xl/externalLinks/externalLink1.xml
-rw---- 4.5 fat 338 b- defS 80-Jan-01 00:00 xl/externalLinks/_rels/externalLink1.xml.rels
-rw---- 4.5 fat 220 b- defS 80-Jan-01 00:00 xl/printerSettings/printerSettings1.bin
-rw---- 4.5 fat 593 b- defS 80-Jan-01 00:00 docProps/core.xml
-rw---- 4.5 fat 62899 b- defS 80-Jan-01 00:00 xl/calcChain.xml
-rw---- 4.5 fat 1031 b- defS 80-Jan-01 00:00 docProps/app.xml
20 files, 1392422 bytes uncompressed, 223675 bytes compressed: 83.9%
$ zipinfo new.xlsx
Archive: new.xlsx
Zip file size: 233180 bytes, number of entries: 20
-rw-r--r-- 3.0 unx 1031 tx defF 80-Jan-01 00:00 docProps/app.xml
-rw-r--r-- 3.0 unx 593 tx defF 80-Jan-01 00:00 docProps/core.xml
-rw-r--r-- 3.0 unx 62899 tx defF 80-Jan-01 00:00 xl/calcChain.xml
-rw-r--r-- 3.0 unx 464247 tx defF 80-Jan-01 00:00 xl/externalLinks/externalLink1.xml
-rw-r--r-- 3.0 unx 338 tx defF 80-Jan-01 00:00 xl/externalLinks/_rels/externalLink1.xml.rels
-rw-r--r-- 3.0 unx 220 bx defF 80-Jan-01 00:00 xl/printerSettings/printerSettings1.bin
-rw-r--r-- 3.0 unx 220 bx defF 80-Jan-01 00:00 xl/printerSettings/printerSettings2.bin
-rw-r--r-- 3.0 unx 1947 tx defF 80-Jan-01 00:00 xl/sharedStrings.xml
-rw-r--r-- 3.0 unx 22698 tx defF 80-Jan-01 00:00 xl/styles.xml
-rw-r--r-- 3.0 unx 7079 tx defF 80-Jan-01 00:00 xl/theme/theme1.xml
-rw-r--r-- 3.0 unx 908 tx defF 80-Jan-01 00:00 xl/workbook.xml
-rw-r--r-- 3.0 unx 295775 tx defF 80-Jan-01 00:00 xl/worksheets/sheet1.xml
-rw-r--r-- 3.0 unx 230959 tx defF 80-Jan-01 00:00 xl/worksheets/sheet2.xml
-rw-r--r-- 3.0 unx 263127 tx defF 80-Jan-01 00:00 xl/worksheets/sheet3.xml
-rw-r--r-- 3.0 unx 35772 tx defF 80-Jan-01 00:00 xl/worksheets/sheet4.xml
-rw-r--r-- 3.0 unx 322 tx defF 80-Jan-01 00:00 xl/worksheets/_rels/sheet1.xml.rels
-rw-r--r-- 3.0 unx 322 tx defF 80-Jan-01 00:00 xl/worksheets/_rels/sheet4.xml.rels
-rw-r--r-- 3.0 unx 1408 tx defF 80-Jan-01 00:00 xl/_rels/workbook.xml.rels
-rw-r--r-- 3.0 unx 1969 tx defF 80-Jan-01 00:00 [Content_Types].xml
-rw-r--r-- 3.0 unx 588 tx defF 80-Jan-01 00:00 _rels/.rels
20 files, 1392422 bytes uncompressed, 229608 bytes compressed: 83.5%
Führen Sie das Auspacken/Pack mit Ihrer Änderung dazwischen. Vergleichen Sie dann den "zip" Inhalt mit einem Diff-Tool. Sind sie wirklich gleich? Gibt es unbeabsichtigte Änderungen? Fehlt etwas? – usr
7z x original.xlsx -o./original_decomp && 7z a -tzip neu ./original_decomp/* && mv ./new.zip ./new.xlsx && 7z x neu.xlsx -o./new_decomp && diff -r original_dec omp neue_decomp && diff original.xlsx neu.xlsx Dies zeigt, dass die dekomprimierten Ordner identisch sind, aber das Original/neue Diff zeigt Binärdateien unterscheiden. – jnewt
Die anderen Unterschiede sind nicht wichtig. Nur die Version benötigt-zu-extrahieren. –