Sto provando a modificare un file XLSX a livello di codice usando Objective-C.Quale libreria zipping dovrei usare per assemblare correttamente un file XLSX valido in Objective-C?
Finora, sto solo modificando i dati su uno dei fogli. I passi che sto prendendo sono le seguenti:
- Copiare il file XLSX alla cartella Documenti
- Unzip il contenitore XLSX con mantenendo la struttura delle directory
- analizzare il file XML corrispondente foglio (sheet2.xml nel mio caso)
- aggiungere alcune righe
- riscrivere la struttura XML e salvarlo
- Inserire il file XML aggiornato nel contenitore XLSX
Tuttavia, il nuovo file XLSX viene danneggiato. Sto usando GDataXML per l'analisi/scrittura XML e Objective-Zip per zippare/decomprimere.
So che il file XML che ho creato è corretto, perché quando decomprimo manualmente e re-zip il file XLSX corrotto, si apre senza errori. Ho fatto questo su entrambi OS X (usando Unarchiver) e Windows (usando 7-Zip).
Il problema riguarda la libreria Objective-Zip o il modo in cui la utilizzo. Qui di seguito è come ho implementare il metodo zippare:
ZipFile *zipFile = [[ZipFile alloc] initWithFileName:XLSXDocumentsFilePath mode:ZipFileModeAppend];
ZipWriteStream *stream= [zipFile writeFileInZipWithName:XLSX_WORKSHEET_XML_SUBPATH compressionLevel:ZipCompressionLevelNone];
[stream writeData:data];
[stream finishedWriting];
[zipFile close];
Ho provato anche gli altri CompressionLevel argomenti disponibili senza fortuna:
ZipCompressionLevelDefault
ZipCompressionLevelBest
ZipCompressionLevelFastest
Le mie domande sono:
- quale libreria zippare dovrei usare per creare un file XLSX valido a livello di programmazione?
- Se Objective-Zip è adatto, cosa c'è di sbagliato nel mio codice?
Dal answer a un'altra domanda, ho scoperto che: "Il formato OOXML impone che l'unico metodo di compressione consentito nel pacchetto è DEFLATE".
È possibile forzare Objective-Zip per utilizzare DEFLATE? O esiste una libreria zipping iOS open source che utilizza DEFLATE?
[miniz.c] (http://code.google.com/p/miniz/source/browse/trunk/miniz.c) implementa l'algoritmo DEFLATE. Non sono sicuro di come ti senti per C semplice. – CodaFi
@CodaFi, non sono molto entusiasta dell'utilizzo di C. semplice. Tuttavia, so che la libreria Objective-Zip utilizza ZLib e MiniZip. – tolgamorf
Objective-Zip implementa la deflazione, ma credo che per impostazione predefinita gzip, che potrebbe essere il motivo per cui "corrompe" il tuo archivio. A corto di licenze per l'algoritmo DEFLATE e per scrivere il tuo, potresti semplicemente scrivere un wrapper attorno a questo. Spiacente, non c'è niente di più semplice, ma questo è brevetti e standard stupidi (OOXML è ridicolo) per te. – CodaFi