在byte []数组中的ashx中创建一个excel文件,供客户端下载

时间:2012-10-19 13:58:37

标签: c# excel ashx

我正在尝试使用DataTableReader从DataTable读取数据后从byte []数组创建一个Excel文件,所有这些都在ashx文件中。但它只是不起作用。在这里,我发布了一些代码:

DataTableReader RS = dt.CreateDataReader();
byte[] byteArray = GetData(RS);

context.Response.ContentType = "application/ms-excel";
context.Response.Clear();

//  context.Response.Charset = "";
try
{
    context.Response.BinaryWrite(byteArray);
    context.Response.OutputStream.Write(byteArray, 0, byteArray.Length);
    context.Response.BufferOutput = true;
    context.Response.Flush();
 }
 catch (Exception ex)
 {
    SendMail(ex.Message.ToString());
 }

抛出以下异常:

  

context.Response.SubStatusCode引发了System.PlatformNotSupportedException类型的异常。 {“此操作需要IIS集成管道模式。”} ashx

我知道如果我使用标题需要有IIS7或Framework 3 +。

任何帮助都将不胜感激!!

2 个答案:

答案 0 :(得分:0)

您设置Response ContentType,然后设置Clear Response。然后你写两次响应,这也是奇怪的。 我会改变这一点,我也会尝试拨打End而不是Flush

使其工作的最小代码数量如下:

...
    DataTableReader RS = dt.CreateDataReader();             
    byte[] byteArray = GetData(RS);             

    try   
    {
        context.Response.Clear();
        context.Response.ContentType = "application/ms-excel";   
        context.Response.OutputStream.Write(byteArray, 0, byteArray.Length);       
        context.Response.End();    
    }    
    catch (Exception ex)    
    {       
        SendMail(ex.Message.ToString());    
    }
...

答案 1 :(得分:0)

你为excel文档添加了MIME类型吗?另外,请查看这篇文章 Setting mime type for excel document