【发布时间】:2012-04-04 11:12:25
【问题描述】:
我使用 ASP MVC3 框架,创建了一个 Excel 文件并使用 FileResult 操作将其输出,内容类型为“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”。
当试图打开它时,Excel 只会说“文件已损坏,无法打开。”
当我打开用于发送输出的源生成 Excel 文件时,它可以正常工作。我还对两个副本的字节进行文件比较,并且文件是相同的。我尝试将损坏的文件通过电子邮件发送给自己,并且附件可以正常打开。
这让我相信这是标题或某种 Excel/Windows 安全配置的问题。
如果是后者,那么我需要一个不会让客户端更改其安全设置的解决方案。
编辑 - 找到设置:
我在 Excel 的信任中心/受保护的视图设置中找到了导致此问题的设置 -“启用来自互联网的文件的受保护视图”。
所以我想问题是 - 有没有办法让文件看起来受信任?
以下是响应标头:
- 缓存控制:私有
- 内容处置:附件;
- filename="报告 - 2012 年 3 月 19 日星期一.xlsx" Content-Length:20569
- 内容类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
产生输出的动作方法:
[HttpPost]
public virtual FileResult Export()
{
try
{
...
string newFilePath = createNewFile(...);
string downloadedFileName = "Report - " + DateTime.Now.ToString("D") + ".xlsx";
return File(newFilePath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", downloadedFileName);
}
catch (Exception ex)
{
...
}
}
我如何创建 Excel 文件:
我有一个模板 XLSX 文件,其中包含列名和其他工作表中的一些透视图。我从 C# 创建了这个模板的副本,然后调用 SQL Server,它使用 OLEDB 连接器将数据输出到第一张表:
set @SQL='insert into OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database=' + @PreparedXLSXFilePath + ';'', ''SELECT * FROM [Data$]'') ...
提前感谢您的帮助。
【问题讨论】:
-
您是如何创建 Excel 文件的?根据您使用的内容,这可能会有所帮助:jwgoerlich.us/blogengine/post/2009/08/11/…
-
发现有问题的设置 - 已更新。我需要找到一种方法来使文件受信任,而无需在客户端进行任何工作。
标签: asp.net-mvc excel download