2009-06-19 7 views
8

Sto utilizzando una semplice applicazione PHP web-based che emette una tabella come un foglio di calcoloPHP - Filetype foglio di calcolo di sola lettura?

header("Content-Disposition: attachment; filename=" . $filename . ".xls"); 
header("Content-Type: application/vnd.ms-excel"); 

//inserts tab delimited text 

Ma io sto trovando il foglio di lavoro scaricato si apre come un file di sola lettura e devono essere salvati localmente e (in Excel su Windows) il tipo è cambiato in XLS (da HTML). C'è un modo per impostare correttamente l'attributo di filetype in modo che facendo un semplice salvataggio non sia necessario correggere il tipo di file?

Il file scaricato è di sola lettura per natura di sicurezza o non è normale?

Inoltre, non mi piacciono i bordi automatici creati quando si apre il foglio di calcolo in Excel o OpenOffice (su Linux). Preferirei non avere la formattazione dei bordi. C'è un modo nel file per specificare nessuna formattazione aggiunta o è incorporato in quelle applicazioni?

risposta

8

Non so di quale versione di Excel si stia parlando, quindi suppongo che si stia utilizzando una versione 2007 o più recente.

Il problema di cambio estensione dipende probabilmente da una funzionalità di Office denominata "Extension Hardening"; per quanto ne so, l'unica soluzione è quella di generare un vero file Excel (ad esempio utilizzando il set di classi PHPExcel) e non un file HTML.

I file scaricati sono di sola lettura per i motivi di sicurezza, dal momento che sono in corso di apertura nel cosiddetto "Protected View":

file da Internet e da altri luoghi potenzialmente non sicuri può contenere virus, worm, o altri tipi di malware, che possono danneggiare il tuo computer. Per proteggere il computer, i file da queste posizioni potenzialmente dannose vengono aperti in Visualizzazione protetta. Utilizzando la vista protetta , è possibile leggere un file e controllarne il contenuto mentre riduce i rischi che possono verificarsi.

Infine, una parola sui confini e la formattazione: con la vecchia versione di Excel 2000, si potrebbe formattare l'output semplicemente aggiungendo alcuni tag XML nella sezione di intestazione del codice HTML; vedere "Microsoft Office HTML and XML Reference" per ulteriori dettagli ed esempi, ma tieni presente che è piuttosto obsoleto, quindi non credo che questa tecnica funzioni ancora con le versioni più recenti di Excel.

Se si desidera avere maggiore controllo sull'output generato, non utilizzare un semplice codice HTML per creare il file del foglio di calcolo.

Su this post è anche possibile trovare alcune alternative a PHPExcel per scrivere file Excel.

6

AFAIK, almeno su Windows, dipende da ciò che l'utente fa con il prompt mostrato dal browser quando seguono 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 presumo che ci sia un blocco in qualche punto che rende il file di sola lettura.

0

Se si desidera salvare in locale, è 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");  

EDIT

Se si stampa il testo delimitato da tabulazioni ed attributi content-disposition come xls o csv, applicazione Excel (o un altro programma, come gnumeric o openoffice) lo riconosce come xls o csv.