457

MS Excel has the following observed MIME types:

  • application/vnd.ms-excel (official)
  • 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)

Is there any one type that would work for all versions? If not, do we need to set response.setContentType() with each one of these mime types individually?

Also, we use file streaming in our application to display document (not just excel - any type of document). In doing so, how can we retain the filename if the user opts to save the file - currently, the name of the servlet that renders the file appears as the default name.

5
  • 7
    More generally, the best way to find out what MS themselves think is the correct type is to find a box with the latest version installed and look at HKCR/.xls 's Content Type value in the registry. Commented Jul 26, 2012 at 11:48
  • 4
    "application/vnd.ms-office" is another mime type for XLS files. Commented Jun 30, 2014 at 19:10
  • application/vnd-xls also works for .xls files. Commented May 25, 2016 at 16:27
  • 2
    Please refer to this post for complete list of MIME types and related excel file extensions. Commented Jan 24, 2018 at 7:18
  • 2
    The standard excel MIME type is:- application/vnd.ms-excel Commented Aug 31, 2020 at 5:56

6 Answers 6

423

I believe the standard MIME type for Excel files is application/vnd.ms-excel.

Regarding the name of the document, you should set the following header in the response:

header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');
Sign up to request clarification or add additional context in comments.

7 Comments

what is the difference between application/msexcel and application/vnd.ms-excel?
If you're wanting to display the document within the browser (if supported) then Content-Disposition needs to be 'inline'. See stackoverflow.com/questions/1395151/…
You should avoid using Content-Disposition in HTTP, it has security considerations. Content-Disposition is only for email. See stackoverflow.com/questions/1012437 for more info.
Note that for OpenXML Excel XLSX file format a different Mime type is defined, see the full list at the link provided.
@DzmitryLazerka what is the "secure" alternative to content-disposition? Following your link, then the link in that answer, then the link in that document, gets us to here: tools.ietf.org/html/rfc6266#section-4.3. As far as I can tell, the security concern is just involving filenames provided by users--if they contain non-latin characters, or characters that are invalid on some OS. All the major browsers have safeguards against these concerns. Windows and Mac also set a flag on a file indicating that it came from the internet, popping up a warning when you try to open it.
|
236

Waking up an old thread here I see, but I felt the urge to add the "new" .xlsx format.

According to http://filext.com/file-extension/XLSX the extension for .xlsx is application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. It might be a good idea to include it when checking for mime types!

1 Comment

This was what I was looking for thanks, needed to support the latest format as well as the previous.
79

For .xls use the following content-type

application/vnd.ms-excel

For Excel 2007 version and above .xlsx files format

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Comments

9

I was setting MIME type from .NET code as below -

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

My application generates excel using OpenXML SDK. This MIME type worked -

vnd.openxmlformats-officedocument.spreadsheetml.sheet

Comments

2

I am using EPPlus to generate .xlsx (OpenXML format based) excel file. For sending this excel file as attachment in email I use the following MIME type and it works fine with EPPlus generated file and opens properly in ms-outlook mail client preview.

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);
}

Comments

1

For anyone who is still stumbling with this after using all of the possible MIME types listed in the question:

I have found that iMacs tend to also throw a MIME type of "text/xls" for XLS Excel files, hope this helps.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.