PHP:Compactar arquivos como xlsx faz com que o arquivo se torne inválido
-
26-09-2019 - |
Pergunta
Eu tenho que substituir variáveis dentro de um arquivo xlsx enviado pelo usuário e estou fazendo desta forma:
- Renomeie o .xlsx para .zip
- Descompacte para uma pasta temporária
- Faça as alterações necessárias
- Compacte os arquivos
- Renomeie o .zip para .xslx
Estou usando ZipArchive simples em PHP.Quando tento abrir o .xlsx gerado no Excel, ele falha com uma mensagem format or extension invalid
.Quando comprimo os arquivos temporários com WinRAR (como zip) e renomeio o arquivo resultante para .xlsx, ele funciona.Os arquivos zip gerados com ambos os métodos contêm a mesma estrutura de dados e arquivos, mas o arquivo WinRAR é um pouco maior (10,2K vs.10,3K com compactação normal).
Ao visualizar o código distorcido dos arquivos, pude perceber que os arquivos aparecem em uma ordem diferente, mas não sei se essa é a causa.Qualquer pista seria muito apreciada.
Solução
Consegui que funcionasse com outro componente, PclZip (phpconcept.net/pclzip).É uma classe que aparentemente usa gzip, e renomear suas saídas para .xlsx é adequado para o Excel 2007.