Establecer el tipo mime para el documento de Excel

361

MS Excel tiene los siguientes tipos MIME observados:

  • application/vnd.ms-excel (oficial)
  • application/msexcel
  • application/x-msexcel
  • application/x-ms-excel
  • application/x-excel
  • application/x-dos_ms_excel
  • application/xls
  • application/x-xls
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (xlsx)

¿Hay algún tipo que funcione para todas las versiones? Si no es así, ¿tenemos que configurar response.setContentType()cada uno de estos tipos de mimos individualmente?

Además, utilizamos la transmisión de archivos en nuestra aplicación para mostrar documentos (no solo Excel, cualquier tipo de documento). Al hacerlo, ¿cómo podemos conservar el nombre de archivo si el usuario opta por guardar el archivo? Actualmente, el nombre del servlet que representa el archivo aparece como el nombre predeterminado.

Subramanian
fuente
44
En términos más generales, la mejor manera de averiguar qué creen los propios MS que es el tipo correcto es encontrar un cuadro con la última versión instalada y observar HKCR/.xlsel Content Typevalor en el registro.
Rup
3
"application / vnd.ms-office" es otro tipo mime para archivos XLS.
herrjeh42
application/vnd-xlsTambién funciona para .xlsarchivos.
mbomb007
Consulte esta publicación para obtener una lista completa de los tipos MIME y las extensiones de archivo de Excel relacionadas.
RBT

Respuestas:

344

Creo que el tipo MIME estándar para archivos Excel es application/vnd.ms-excel.

Con respecto al nombre del documento, debe establecer el siguiente encabezado en la respuesta:

header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');
jbochi
fuente
16
¿Cuál es la diferencia entre application / msexcel y application / vnd.ms-excel?
Thabiso Mofokeng
66
Si desea mostrar el documento dentro del navegador (si es compatible), Content-Disposition debe estar 'en línea'. Ver stackoverflow.com/questions/1395151/…
flash
2
Debe evitar el uso de Content-Disposition en HTTP, tiene consideraciones de seguridad. La disposición de contenido es solo para correo electrónico. Consulte stackoverflow.com/questions/1012437 para obtener más información.
Dzmitry Lazerka
Tenga en cuenta que para el formato de archivo OpenXML Excel XLSX se define un tipo Mime diferente, consulte la lista completa en el enlace proporcionado.
Oskar Berggren
@DzmitryLazerka, ¿cuál es la alternativa "segura" a la disposición de contenido? Siguiendo su enlace, luego el enlace en esa respuesta, luego el enlace en ese documento, nos lleva a aquí: tools.ietf.org/html/rfc6266#section-4.3 . Por lo que puedo decir, la preocupación de seguridad solo involucra los nombres de archivo proporcionados por los usuarios, si contienen caracteres no latinos o caracteres que no son válidos en algunos sistemas operativos. Todos los principales navegadores tienen salvaguardas contra estas preocupaciones. Windows y Mac también establecen un indicador en un archivo que indica que proviene de Internet, y aparece una advertencia cuando intenta abrirlo.
Kip
170

Aquí veo un hilo antiguo, pero sentí la necesidad de agregar el "nuevo" formato .xlsx.

De acuerdo con http://filext.com/file-extension/XLSX, la extensión para .xlsx es application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. ¡Puede ser una buena idea incluirlo cuando se buscan tipos de mimo!

Karlis Rode
fuente
1
Esto era lo que estaba buscando, gracias, necesitaba admitir el último formato y el anterior.
Lee
42

Siempre debe usar el siguiente tipo MIME si desea servir un archivo de Excel en formato xlsx

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
Siva Kranthi Kumar
fuente
13

Para .xls use el siguiente tipo de contenido

application/vnd.ms-excel

Para la versión Excel 2007 y los formatos de archivo .xlsx superiores

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Dulith De Costa
fuente
8

Estaba configurando el tipo MIME del código .NET como se muestra a continuación:

File(generatedFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")

Mi aplicación genera excel usando OpenXML SDK. Este tipo MIME funcionó:

vnd.openxmlformats-officedocument.spreadsheetml.sheet
Divyans Mahansaria
fuente
2

Estoy usando EPPlus para generar un archivo Excel .xlsx (basado en el formato OpenXML). Para enviar este archivo de Excel como archivo adjunto en un correo electrónico, uso el siguiente tipo MIME y funciona bien con el archivo generado por EPPlus y se abre correctamente en la vista previa del cliente de correo ms-outlook.

string mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.Net.Mime.ContentType contentType = null;
if (mimeType?.Length > 0)
{
    contentType = new System.Net.Mime.ContentType(mimeType);
}
Vishwajit G
fuente
0

Para cualquiera que todavía esté tropezando con esto después de usar todos los tipos MIME posibles enumerados en la pregunta:

He descubierto que los iMacs tienden a lanzar también un tipo MIME de "text / xls" para archivos XLS Excel, espero que esto ayude.

abejas
fuente