Definindo o tipo mime para o documento do excel

361

O MS Excel possui os seguintes 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)

Existe algum tipo que funcione para todas as versões? Caso contrário, precisamos definir response.setContentType()com cada um desses tipos de mímica individualmente?

Além disso, usamos o streaming de arquivos em nosso aplicativo para exibir documentos (não apenas o Excel - qualquer tipo de documento). Ao fazer isso, como podemos manter o nome do arquivo se o usuário optar por salvar o arquivo - atualmente, o nome do servlet que o processa aparece como o nome padrão.

Subramanian
fonte
4
De maneira mais geral, a melhor maneira de descobrir o que o próprio MS acha que é o tipo correto é encontrar uma caixa com a versão mais recente instalada e verificar HKCR/.xlso Content Typevalor do registro.
Rup
3
"application / vnd.ms-office" é outro tipo de mímica para arquivos XLS.
herrjeh42
application/vnd-xlstambém funciona para .xlsarquivos.
Mbomb007
Consulte esta postagem para obter uma lista completa dos tipos MIME e extensões de arquivo relacionadas ao Excel.
RBT 24/01

Respostas:

344

Eu acredito que o tipo MIME padrão para arquivos do Excel é application/vnd.ms-excel.

Em relação ao nome do documento, você deve definir o seguinte cabeçalho na resposta:

header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');
jbochi
fonte
16
qual é a diferença entre application / msexcel e application / vnd.ms-excel?
Thabiso Mofokeng 28/11/12
6
Se você deseja exibir o documento no navegador (se suportado), a Disposição de Conteúdo precisa estar em linha. Veja stackoverflow.com/questions/1395151/…
flash
2
Você deve evitar usar Disposição de conteúdo no HTTP, pois possui considerações de segurança. Disposição de conteúdo é apenas para email. Consulte stackoverflow.com/questions/1012437 para obter mais informações.
Dzmitry Lazerka
Observe que, para o formato de arquivo OpenXML Excel XLSX, um tipo diferente de Mime é definido, consulte a lista completa no link fornecido.
Oskar Berggren
@DzmitryLazerka, qual é a alternativa "segura" à disposição do conteúdo? Após o seu link, o link dessa resposta e o link do documento nos levam até aqui: tools.ietf.org/html/rfc6266#section-4.3 . Pelo que sei, a preocupação com a segurança envolve apenas nomes de arquivos fornecidos pelos usuários - se eles contiverem caracteres não latinos ou inválidos em alguns sistemas operacionais. Todos os principais navegadores têm proteções contra essas preocupações. O Windows e o Mac também definem um sinalizador em um arquivo, indicando que ele veio da Internet, exibindo um aviso quando você tenta abri-lo.
Kip
170

Acordando aqui um tópico antigo, mas senti o desejo de adicionar o "novo" formato .xlsx.

De acordo com http://filext.com/file-extension/XLSX, a extensão para .xlsx é application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Pode ser uma boa ideia incluí-lo ao verificar tipos de mímica!

Karlis Rode
fonte
11
Era isso que eu estava procurando graças, necessário para suportar o formato mais recente e o anterior.
Lee
42

Você sempre deve usar o tipo MIME abaixo, se quiser servir o arquivo excel no formato xlsx

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

Para .xls, use o seguinte tipo de conteúdo

application/vnd.ms-excel

Para versão do Excel 2007 e acima do formato de arquivos .xlsx

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

Eu estava definindo o tipo MIME a partir do código .NET como abaixo -

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

Meu aplicativo gera excel usando o OpenXML SDK. Esse tipo MIME funcionou -

vnd.openxmlformats-officedocument.spreadsheetml.sheet
Divãs Mahansaria
fonte
2

Estou usando o EPPlus para gerar arquivo .xlsx (baseado no formato OpenXML). Para enviar este arquivo do Excel como anexo no email, eu uso o seguinte tipo MIME e ele funciona bem com o arquivo gerado pelo EPPlus e abre adequadamente na visualização do cliente de email do 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
fonte
0

Para quem ainda está tropeçando com isso depois de usar todos os possíveis tipos MIME listados na pergunta:

Descobri que os iMacs também costumam lançar um tipo MIME de "text / xls" para arquivos XLS Excel, espero que isso ajude.

be_es
fonte