PHP - Tipo di file foglio di calcolo di sola lettura?
-
06-07-2019 - |
Domanda
Sto usando una semplice applicazione PHP basata sul web che genera una tabella come foglio di calcolo
header("Content-Disposition: attachment; filename=" . $filename . ".xls");
header("Content-Type: application/vnd.ms-excel");
//inserts tab delimited text
Ma sto scoprendo che il foglio di calcolo scaricato si apre come file di sola lettura e deve essere salvato localmente e (in Excel su Windows) il tipo è cambiato in XLS (da HTML). C'è un modo per impostare correttamente l'attributo del tipo di file in modo che fare un semplice salvataggio non richieda la correzione del tipo di file?
Il file è stato scaricato in sola lettura per motivi di sicurezza o non è normale?
Inoltre non mi piacciono i bordi automatici creati all'apertura del foglio di calcolo in Excel o OpenOffice (su Linux). Preferirei non avere formattazione dei bordi. Esiste un modo nel file per specificare nessuna formattazione aggiunta o è integrato in tali applicazioni?
Soluzione
Non so di quale versione di Excel stai parlando, quindi suppongo che tu stia utilizzando una versione 2007 o più recente.
Il problema con la modifica dell'estensione dipende probabilmente da una funzionalità di Office denominata " Extension Hardening " ;; per quanto ne so, l'unica soluzione è generare un file Excel reale (ad esempio utilizzando PHPExcel insieme di classi) e non un file HTML.
I file scaricati sono di sola lettura per motivi di sicurezza, poiché vengono aperti nel cosiddetto " Vista protetta " ;:
File da Internet e da altre posizioni potenzialmente non sicure può contenere virus, worm o altri tipi di malware che possono danneggiare il tuo computer. Per proteggere il tuo computer, i file da questi posizioni potenzialmente non sicure vengono aperte in Visualizzazione protetta. Usando Visualizzazione protetta, puoi leggere un file e controllarne il contenuto mentre ridurre i rischi che possono verificarsi.
Infine, una parola sui bordi e sulla formattazione: con la vecchia versione di Excel 2000, è possibile formattare l'output semplicemente aggiungendo alcuni tag XML nella sezione dell'intestazione del codice HTML; vedi il " Riferimento HTML e XML di Microsoft Office " per ulteriori dettagli ed esempi, ma tieni presente che è abbastanza obsoleto, quindi non credo che questa tecnica funzioni ancora con le versioni Excel più recenti.
Se vuoi avere un maggiore controllo sull'output generato, non dovresti usare HTML semplice per creare il file di foglio di calcolo.
Su questo post puoi anche trovare alcune alternative a PHPExcel per scrivere file Excel.
Altri suggerimenti
AFAIK, almeno su Windows, dipende da cosa fa l'utente con il prompt mostrato dal browser quando segue il collegamento.
Se l'utente sceglie di salvare il file, non sarà di sola lettura. Se l'utente sceglie di aprirlo, il file verrà salvato in una directory temporanea e il browser potrebbe rimuoverlo quando viene chiuso. Non sono sicuro di come funzioni questo meccanismo, ma suppongo che ci sia un blocco in un punto che rende il file di sola lettura.
Se si desidera salvare localmente, è possibile impostare l'attributo content-description
:
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=" . $filename . ".xls");
Modifica
Se si stampa il testo delimitato da tabulazioni e si attribuisce disposizione-contenuto
come xls o csv,
L'applicazione Excel (o altro programma, come gnumeric o openoffice) la riconosce come xls o csv.