PHP: i file di cerniera come XLSX fa non essere valido il file
-
26-09-2019 - |
Domanda
Devo sostituire le variabili all'interno di un file XLSX richiesto dall'utente e lo sto facendo in questo modo:
- Rinominare .xlsx a .zip
- Decomprimere
- Apportare le modifiche necessarie
- Zip i file
- Rinominare .zip in .xslx
Sto usando la semplice ziparchive in PHP. Quando provo ad aprire .xlsx generato in Excel, non riesce con un messaggio format or extension invalid
. Quando comprometto i file temporanei con Winrar (come zip) e rinominisco il file risultante in .xlsx, funziona. I file ZIP generati con entrambi i metodi contengono la stessa struttura e file dei dati, ma il file Winrar è leggermente più grande (10,2k vs. 10,3k con compressione normale).
Quando ho visualizzato il codice confuso dei file, ho potuto vedere che i file compaiono in un ordine diverso, ma non so se questa è la causa. Qualsiasi indizio sarebbe molto apprezzato.
Soluzione
L'ho fatto funzionare con un altro componente, pclZip (phpconcept.net/pclzip). È una classe che apparentemente utilizza GZIP e la ridenominazione delle sue uscite a .xlsx va bene con Excel 2007.