2012-06-18 9 views
32

Sto provando a creare un file xlsx a livello di codice su iOS. Poiché i dati interni dei file xlsx sono fondamentalmente memorizzati in file xml separati, ho provato a ricreare la struttura xlsx con tutti i suoi file e sottodirectory, comprimerli in un file zip e impostarne l'estensione su xlsx. Uso il parser/writer GDataXML per creare tutti i file xml necessari. Tuttavia, il file che ottengo non può essere aperto come file xlsx. Anche se copio tutti i dati da un file xlsx valido, creare manualmente tutti i file xml copiando i dati dai file xml originali e comprimerli manualmente, non riesco a ricreare un file xlsx valido.Come assemblare correttamente un file xlsx valido dai suoi sub-componenti interni?

Le domande sono:

  • è xlsx in realtà solo un archivio contenente i file XML?
  • Come posso creare un file xlsx valido a livello di codice se non riesco a comprimere i file xml nel file zip e impostare la sua estensione su xlsx?

risposta

40

In risposta alle tue domande:

  1. XLSX è solo una raccolta di file XML in un contenitore zip. Non c'è altra magia.
  2. Se si decomprime/decomprime un file XLSX valido e quindi lo si ricomprime/lo zip e non è possibile leggere l'output risultante, allora il problema è nel software di zipping. Provare una libreria/utility diversa o controllare il tipo e i livelli di compressione predefiniti che utilizza e provare a farlo corrispondere a qualsiasi altro utilizzo di Excel. Oppure controlla il file zip per assicurarti che la struttura della directory sia stata mantenuta.

esempio del contenuto di un file XLSX:

unzip -l example.xlsx 
Archive: example.xlsx 
    Length  Date Time Name 
-------- ---- ---- ---- 
     769 10-15-14 09:23 xl/worksheets/sheet1.xml 
     550 10-15-14 09:22 xl/workbook.xml 
     201 10-15-14 09:22 xl/sharedStrings.xml 
     ... 

ho decomprimere regolarmente file XLSX, apportare delle piccole modifiche per i test e li ri-Zip senza alcun problema.

Aggiornamento: l'importante è evitare di zippare la directory principale. Ecco un esempio utilizzando l'utilità del sistema zip su Linux o OS X:

# Unzip an xlsx file into a directory. 
unzip example.xlsx -d newdir 

# Make some valid changes to the files. 
cd newdir/ 
vi xl/worksheets/sheet1.xml 

# Rezip the files *FROM* the unzipped directory. 
# Note: you could also re-zip to the original file if required. 
find . -type f | xargs zip ../newfile.xlsx 

# Check the file looks okay. 
cd .. 
unzip -l newfile.xlsx 
xdg-open newfile.xlsx 
+1

7-zip versione 9.20 non sta facendo il lavoro. Quale software utilizzi ha i valori predefiniti corretti per Office xlsx? –

+5

7-zip versione 9.20 ha fatto il trucco, ma come ha detto David, non faremo un zip con la cartella principale. Lo zip (che verrà rinominato in xslx) deve avere direttamente le cartelle _rels, docProps e xl. –

+2

Ho aggiunto un esempio. – jmcnamara

27

Se decomprimere un file xlsx in una cartella e poi ricomprimere nuovamente, il xlsx viene danneggiato/non riconosciuto. Nel mio caso, la causa è che il mio strumento zip utilizza il nome della cartella come primo livello per il percorso relativo di ciascun file all'interno del file zip.

Ho risolto il problema creando un file zip vuoto all'interno della cartella con il contenuto xlsx e quindi aggiungendo tutti i file e le cartelle.

In realtà, se si tenta di comprimere la cartella stessa, il file non è un xlsx valido. Si consiglia di andare all'interno della cartella, selezionare tutti i contenuti e quindi fare clic con il pulsante destro del mouse su & zip.

Problemi correlati