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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top