Pregunta

Estoy usando una sencilla aplicación PHP basada en web que genera una tabla como una hoja de cálculo

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

//inserts tab delimited text

Pero encuentro que la hoja de cálculo descargada se abre como un archivo de solo lectura y debe guardarse 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 se descarga de solo lectura por naturaleza de seguridad o no es normal?

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

¿Fue útil?

Solución

No sé de qué versión de Excel estás hablando, así que supongo que estás usando una versión 2007 o más nueva.

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

Los archivos descargados son de solo lectura por razones de seguridad, ya que se abren en el llamado " Vista protegida " ;:

  

Archivos de Internet y de otras ubicaciones potencialmente inseguras   puede contener virus, gusanos u otro tipo de malware, que puede dañar   tu computadora. Para ayudar a proteger su computadora, los archivos de estos   ubicaciones potencialmente inseguras se abren en la Vista protegida. Mediante el uso   Vista protegida, puede leer un archivo e inspeccionar su contenido mientras   reduciendo los riesgos que pueden ocurrir.

Finalmente, una palabra sobre los bordes y el formato: con la versión anterior de Excel 2000, podría formatear el resultado simplemente agregando algunas etiquetas XML en la sección del encabezado del código HTML; consulte el " Referencia HTML y XML de Microsoft Office " 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 más recientes de Excel.

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

En esta publicación también puede encontrar algunas alternativas a PHPExcel para escribir archivos de Excel.

Otros consejos

AFAIK, al menos en Windows, depende de lo que haga el usuario 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 de solo lectura.

Si desea guardar localmente, 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");    

EDIT

Si imprime el texto delimitado por tabulaciones y el atributo disposición de contenido como xls o csv, La aplicación Excel (u otro programa, como gnumeric u openoffice) lo reconoce como xls o csv.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top