Définition du type MIME pour le document Excel

361

MS Excel a les types MIME observés suivants:

  • application/vnd.ms-excel (officiel)
  • 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-t-il un type qui fonctionnerait pour toutes les versions? Sinon, devons-nous définir response.setContentType()chacun de ces types de mime individuellement?

En outre, nous utilisons le streaming de fichiers dans notre application pour afficher le document (pas seulement Excel - tout type de document). Ce faisant, comment pouvons-nous conserver le nom de fichier si l'utilisateur choisit d'enregistrer le fichier - actuellement, le nom de la servlet qui rend le fichier apparaît comme nom par défaut.

Subramanian
la source
4
Plus généralement, la meilleure façon de savoir ce que MS eux-mêmes pensent être le bon type est de trouver une boîte avec la dernière version installée et de regarder HKCR/.xlsla Content Typevaleur de 's dans le registre.
Rup
3
"application / vnd.ms-office" est un autre type MIME pour les fichiers XLS.
herrjeh42
application/vnd-xlsfonctionne également pour les .xlsfichiers.
mbomb007
Veuillez vous référer à cet article pour la liste complète des types MIME et des extensions de fichier Excel associées.
RBT

Réponses:

344

Je crois que le type MIME standard pour les fichiers Excel est application/vnd.ms-excel.

Concernant le nom du document, vous devez définir l'en-tête suivant dans la réponse:

header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');
jbochi
la source
16
quelle est la différence entre application / msexcel et application / vnd.ms-excel?
Thabiso Mofokeng
6
Si vous souhaitez afficher le document dans le navigateur (s'il est pris en charge), Content-Disposition doit être «en ligne». Voir stackoverflow.com/questions/1395151/…
flash
2
Vous devez éviter d'utiliser Content-Disposition dans HTTP, il a des considérations de sécurité. Content-Disposition est uniquement pour le courrier électronique. Voir stackoverflow.com/questions/1012437 pour plus d'informations.
Dzmitry Lazerka
Notez que pour le format de fichier OpenXML Excel XLSX, un type MIME différent est défini, voir la liste complète sur le lien fourni.
Oskar Berggren
@DzmitryLazerka quelle est l'alternative "sécurisée" à la disposition de contenu? En suivant votre lien, puis le lien dans cette réponse, puis le lien dans ce document, nous amène ici: tools.ietf.org/html/rfc6266#section-4.3 . Pour autant que je sache, le problème de sécurité concerne uniquement les noms de fichiers fournis par les utilisateurs - s'ils contiennent des caractères non latins ou des caractères non valides sur certains systèmes d'exploitation. Tous les principaux navigateurs disposent de garanties contre ces problèmes. Windows et Mac définissent également un indicateur sur un fichier indiquant qu'il provient d'Internet, un avertissement s'affiche lorsque vous essayez de l'ouvrir.
Kip
170

Réveiller un vieux fil ici, je vois, mais j'ai ressenti le besoin d'ajouter le "nouveau" format .xlsx.

Selon http://filext.com/file-extension/XLSX, l'extension pour .xlsx est application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Ce pourrait être une bonne idée de l'inclure lors de la vérification des types de mime!

Karlis Rode
la source
1
C'est ce que je recherchais, je devais prendre en charge le dernier format ainsi que le précédent.
Lee
42

Vous devez toujours utiliser le type MIME ci-dessous si vous souhaitez servir un fichier Excel au format xlsx

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

Pour .xls, utilisez le type de contenu suivant

application/vnd.ms-excel

Pour la version Excel 2007 et au-dessus du format de fichier .xlsx

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

Je définissais le type MIME à partir du code .NET comme ci-dessous -

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

Mon application génère Excel en utilisant le SDK OpenXML. Ce type MIME fonctionnait -

vnd.openxmlformats-officedocument.spreadsheetml.sheet
Divyans Mahansaria
la source
2

J'utilise EPPlus pour générer un fichier Excel .xlsx (basé sur le format OpenXML). Pour envoyer ce fichier Excel en tant que pièce jointe dans un courrier électronique, j'utilise le type MIME suivant et cela fonctionne très bien avec le fichier généré par EPPlus et s'ouvre correctement dans l'aperçu du client de messagerie 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
la source
0

Pour tous ceux qui trébuchent encore après avoir utilisé tous les types MIME possibles répertoriés dans la question:

J'ai constaté que les iMacs ont également tendance à lancer un type MIME de "texte / xls" pour les fichiers Excel XLS, j'espère que cela vous aidera.

les abeilles
la source