How do you stream an Excel 2007 or Word 2007 file using asp.net and c#

后端 未结 3 1461
忘掉有多难
忘掉有多难 2020-12-06 01:34

I\'m working on a web app and need to stream various files. I can do pdfs, images, and older Office documents. However, when I try to do with 2007 documents, it breaks. H

相关标签:
3条回答
  • 2020-12-06 01:58
    .doc
    
    
    application/msword
    
    .dot
    
    
    application/msword
    
    .docx
    
    
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
    
    .dotx
    
    
    application/vnd.openxmlformats-officedocument.wordprocessingml.template
    
    .docm
    
    
    application/vnd.ms-word.document.macroEnabled.12
    
    .dotm
    
    
    application/vnd.ms-word.template.macroEnabled.12
    
    .xls
    
    
    application/vnd.ms-excel
    
    .xlt
    
    
    application/vnd.ms-excel
    
    .xla
    
    
    application/vnd.ms-excel
    
    .xlsx
    
    
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    
    .xltx
    
    
    application/vnd.openxmlformats-officedocument.spreadsheetml.template
    
    .xlsm
    
    
    application/vnd.ms-excel.sheet.macroEnabled.12
    
    .xltm
    
    
    application/vnd.ms-excel.template.macroEnabled.12
    
    .xlam
    
    
    application/vnd.ms-excel.addin.macroEnabled.12
    
    .xlsb
    
    
    application/vnd.ms-excel.sheet.binary.macroEnabled.12
    
    .ppt
    
    
    application/vnd.ms-powerpoint
    
    .pot
    
    
    application/vnd.ms-powerpoint
    
    .pps
    
    
    application/vnd.ms-powerpoint
    
    .ppa
    
    
    application/vnd.ms-powerpoint
    
    .pptx
    
    
    application/vnd.openxmlformats-officedocument.presentationml.presentation
    
    .potx
    
    
    application/vnd.openxmlformats-officedocument.presentationml.template
    
    .ppsx
    
    
    application/vnd.openxmlformats-officedocument.presentationml.slideshow
    
    .ppam
    
    
    application/vnd.ms-powerpoint.addin.macroEnabled.12
    
    .pptm
    
    
    application/vnd.ms-powerpoint.presentation.macroEnabled.12
    
    .potm
    
    
    application/vnd.ms-powerpoint.presentation.macroEnabled.12
    
    .ppsm
    
    
    application/vnd.ms-powerpoint.slideshow.macroEnabled.12
    
    0 讨论(0)
  • 2020-12-06 02:06

    According to a brief web search, the correct mime types for word and excel are:

    application/vnd.openxmlformats-officedocument.wordprocessingml.document
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    

    http://www.bram.us/2007/05/25/office-2007-mime-types-for-iis/

    Edit:

    The following simplified sample works for me. It is different from yours in that it uses a generic handler instead of a web form (which is more appropriate for something like this anyway).

    To test it, make sure there is an excel 2007 file named Book1.xlsx in the top level folder of the application.

    DownloadSpreadsheet.ashx:
    
    <%@ WebHandler Language="C#" Class="DownloadSpreadsheetHandler" %>
    
    using System;
    using System.Web;
    using System.IO;
    
    public class DownloadSpreadsheetHandler: IHttpHandler {
    
        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            string path = context.Server.MapPath("~/Book1.xlsx");
            using (FileStream spreadsheet = File.OpenRead(path))
            {
                CopyStream(spreadsheet, context.Response.OutputStream);
            }
        }
    
        public bool IsReusable {
            get {
                return false;
            }
        }
    
        private static void CopyStream(Stream input, Stream output)
        {
            byte[] buffer = new byte[32768];
            while (true)
            {
                int read = input.Read(buffer, 0, buffer.Length);
                if (read <= 0)
                    return;
                output.Write(buffer, 0, read);
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-06 02:13

    For csv format files that we want Excel to be used to open, we are using: Response.ContentType = "application/msexcel";

    Perhaps we get away with this because it is not a true xls file, however.

    0 讨论(0)
提交回复
热议问题