2009-06-19 18 views
8

estoy usando una aplicación basada en web PHP simple que da salida a una tabla como una hoja de cálculoPHP - ¿Tipo de archivo de hoja de cálculo de solo lectura?

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

//inserts tab delimited text 

Pero estoy encontrando la hoja de cálculo descargada se abre como un archivo de sólo lectura y se deben guardar localmente y (en Excel en Windows) el tipo cambió a XLS (desde HTML). ¿Hay alguna manera de establecer el atributo de tipo de archivo correctamente para que hacer un simple guardado no requiera corregir el tipo de archivo?

¿El archivo descargado es de solo lectura por naturaleza de seguridad o no es esto normal?

Además, no me gustan los bordes automáticos creados al abrir la hoja de cálculo en Excel u OpenOffice (en Linux). Preferiría no tener ningún formato de borde. ¿Hay alguna manera en el archivo para especificar que no hay formateo agregado o está integrado en esas aplicaciones?

Respuesta

8

No sé de qué versión de Excel está hablando, por lo que supongo que está utilizando una versión 2007 o posterior.

El problema de cambio de extensión probablemente dependa de una función de Office llamada "Extension Hardening"; Hasta donde yo sé, la única solución es generar un archivo Excel real (por ejemplo, utilizando el conjunto de clases PHPExcel), y no un archivo HTML.

Los archivos descargados son de sólo lectura por razones de seguridad, ya que se están abriendo en el llamado "Protected View":

archivos de Internet y de otros lugares potencialmente inseguras pueden contener virus, gusanos, u otros tipos de malware, que pueden dañar en tu computadora. Para ayudar a proteger su computadora, los archivos de estas ubicaciones potencialmente inseguras se abren en la Vista protegida. Al usar Vista protegida, puede leer un archivo e inspeccionar su contenido mientras reduce los riesgos que pueden ocurrir.

Finalmente, una palabra sobre bordes y formato: con la versión anterior de Excel 2000, podría formatear la salida simplemente agregando algunas etiquetas XML en la sección del encabezado del código HTML; consulte "Microsoft Office HTML and XML Reference" para obtener más detalles y ejemplos, pero tenga en cuenta que es bastante obsoleto, por lo que no creo que esta técnica todavía funcione con las versiones de Excel más recientes.

Si desea tener más control sobre la salida generada, no debe usar HTML simple para crear el archivo de la hoja de cálculo.

En this post también puede encontrar algunas alternativas a PHPExcel para escribir archivos de Excel.

6

AFAIK, al menos en Windows, depende de lo que el usuario haga con el mensaje que muestra el navegador cuando sigue el enlace.

Si el usuario elige guardar el archivo, no será de solo lectura. Si el usuario elige abrirlo, el archivo se guardará en un directorio temporal y el navegador puede eliminarlo cuando se cierre. No estoy seguro de cómo funciona este mecanismo, pero supongo que hay un bloqueo involucrado en algún lugar que hace que el archivo sea solo de lectura.

0

Si desea guardar localmente, se puede establecer el atributo content-description:

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

EDITAR

Si imprime la etiqueta de texto delimitado y atributos content-disposition como XLS o CSV, aplicación Excel (u otro programa, como gnumeric u openoffice) lo reconoce como xls o csv.

Cuestiones relacionadas