Sto provando a modificare a livello di programmazione un file excel (xlsx). Posso decomprimere con successo, modificare l'xml secondo necessità e ricomprimerlo. Tuttavia, ricevo un avviso ogni volta che apro Excel, anche se legge il file. Credo che l'errore sia dovuto al metodo di compressione usato. Questo è un esempio dei più vicini posso ottenere:metodo di compressione per xlsx con 7z
Decompress
7z x original.xlsx -o./decomp_xlsx
..Do alcune cose ..
Compress
7z a -tzip new ./decomp_xlsx/*
Rinomina
mv ./new.zip ./new.xlsx
L'errore ottengo io s: Excel ha trovato contenuti illeggibili in 'new.xlsx'. Vuoi recuperare il contenuto di questa cartella di lavoro? Se ti fidi dell'origine di questa cartella di lavoro, fai clic su Sì.
Da ECMA-376-2 Formati aperti Office Parte 2 (Convenzioni di packaging) L'algoritmo di compressione supportato è DEFLATE, come descritto nella specifica .ZIP. L'implementatore del pacchetto non deve utilizzare alcun algoritmo di compressione diverso da DEFLATE.
Quindi, quali interruttori devo utilizzare in 7z o in un altro programma compatibile con Linux per portare a termine il lavoro senza l'avviso? Ho provato a rilasciare -tzip e usare -m0 = COPY, ma excel non può nemmeno recuperare da quello.
Quindi ecco il risultato del programma zip e zipinfo. Immagino che non troverò uno strumento per farlo, oltre a quello fornito di seguito, quindi premetterò la risposta e vedrò se riesco a trovare qualcuno da tradurre in python per il test. I "Non sono sicuro che gestisce le differenze tra il 4.5/3.0, quindi B-/tx o defs/deff però.
$ 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%
Esegui il decomprimere/pacchetto con la modifica in mezzo. Quindi confrontare i contenuti "zip" con uno strumento diff. Sono davvero uguali? Ci sono modifiche non intenzionali? Manca qualcosa? – usr
7z x original.xlsx -o./original_decomp && 7z a -tzip new ./original_decomp/* && mv ./new.zip ./new.xlsx && 7z x new.xlsx -o./new_decomp && diff -r original_dec omp new_decomp && diff original.xlsx new.xlsx Questo mostra che le cartelle decompresse sono identiche, ma la differenza originale/nuova mostra i file binari differiscono. – jnewt
Le altre differenze non contano. Solo la versione necessaria per estrarre. –