在response.writefile之后处理页面停止

时间:2012-10-22 07:16:16

标签: c# asp.net response export-to-excel

这个问题已被多次询问,但我仍然无法找到合适的解决方案。我有两个问题。

我正在创建一个excel文件,将数据写入其中,然后将其呈现给用户下载。我已经使用了microsoft.interop。

第一个问题是: 我正在尝试使用messagebox(javascript)来显示用户下载excel后在excel文件中生成了多少行。此消息框从不显示,但代码已执行。我怎样才能做到这一点?

其次: 创建excel之后,即使在我手动清理了引用之后,excel.exe进程仍在任务管理器中运行。

在呈现文件后,此警告框不会显示。

flag = WriteDatasetToExcel(ds);
            if (flag)
            {

                ClientScript.RegisterClientScriptBlock(GetType(), "Javascript", "<script>alert('Number of rows generated : " + ds.Tables[0].Rows.Count + "')</script>");
            }

提供相关代码

excelApp = new Excel.Application();
        excelwrkbook = excelApp.Workbooks.Add(1);
        excelwrksheet = (Excel.Worksheet)excelwrkbook.Sheets[1];
        excelwrksheet.Name = "Application Data";

写入数据后,保存和渲染完成如下:

excelwrkbook.SaveAs(filepath, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, false, true, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, Missing.Value, Missing.Value, true);
        excelwrkbook.Close(0, 0, 0);
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.Buffer = true;
        HttpContext.Current.Response.Charset = "";
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + filename);
        HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
        HttpContext.Current.Response.WriteFile(filepath);
        excelApp.Quit();
        flag = true;

现在最后是清理代码:

ReleaseObjects(excelrange);
        ReleaseObjects(excelwrksheet);
        ReleaseObjects(excelwrkbook);
        ReleaseObjects(excelApp);

releaseobjects功能如下:

private void ReleaseObjects(Object obj)
{
    if (obj != null && Marshal.IsComObject(obj))
    {
        while (System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) != 0) { }

    }
}

1 个答案:

答案 0 :(得分:1)

首先,请允许我告诉您,使用Microsoft Excel互操作在基于Web的环境中工作效率不高。

我经常使用openXML方法来满足这种需求。 here

第一个问题: 您的响应内容类型是application / vnd.ms-excel,因此浏览器不会从此内容执行任何Java脚本。您必须确定已下载excel或事先调用以获取行并将结果返回到java脚本或任何其他可接受的内容类型中。

对于你的第二个问题:只是不要将它用于它不是为它设计的网络环境。

相关问题