ClosedXML:导出到Excel无法下载文件 MVC 4

4
我有一个 List<T>,将其转换为Datatable,然后使用ClosedXML库通过Kingsoft-Spreadsheets将该Datatable导出到Excel。但是由于某些原因,代码无法工作,工作表未能下载。我的MVC视图上显示了奇怪的符号屏幕。我已经附上了参考图片。非常感谢您的帮助。

enter image description here

3个回答

1
看起来Excel文件已经正确创建,但您的浏览器试图将其打开为纯文本文件。请正确设置响应的内容类型和内容分配头,如下所示:
Response.AddHeader("content-disposition", "attachment; filename=" + myName);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; // or "application/vnd.ms-excel"

如果需要完整的可工作代码示例,请参考这个问题及其答案。


先生,我已经按照上述添加了contentType和AddHeader的值,尽管错误仍然存在。 - user3289773
DataTable dtq = GetDT(List<T>); MemoryStream MyMemoryStream = new MemoryStream(); using (XLWorkbook wb = new XLWorkbook()) { wb.Worksheets.Add(dtq); Response.Clear(); Response.Charset = ""; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment;filename=HelloWorld.xlsx"); Response.Buffer = true; wb.SaveAs(MyMemoryStream); MyMemoryStream.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); }数据表 dtq = GetDT(List <T>); MemoryStream MyMemoryStream = new MemoryStream(); 使用(XLWorkbook wb = new XLWorkbook()) { wb.Worksheets.Add(dtq); 响应清除(); 响应字符集 =“”; 响应内容类型 =“application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”; 响应.AddHeader(“content-disposition”,“attachment; filename = HelloWorld.xlsx”); 响应缓冲区= true; wb.SaveAs(MyMemoryStream); MyMemoryStream.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); } - user3289773
我尝试了不同的代码片段,但是没有成功,所有内容都呈现在浏览器中,欢迎任何建议。 - user3289773

1

抱歉,我在“导出Excel”按钮点击时使用了ajax post back,没有页面postback。实际上需要完整的页面post back。我只是添加了相应控制器和操作方法的window.location.href,然后就行了...它运行良好。


-1

在编程中,应该避免调用ajax:

function ExportSPReport() {
    window.location = '@Url.Action("ExportSPReport", "Report")';
    @*$.ajax({
            url: '@Url.Action("ExportSPReport", "Report")',
            type: "GET",
            success: function (data) {
                //alert(data);
                //$("#downloadFile").attr("href", data);
                //document.getElementById('downloadFile').click();
            },
            error: function (reponse) {
            }
        });
    }*@
}

不要使用ajax调用,使用window.location。 - SANJAY SHARMA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接