我使用ASP MVC 3框架,创建了一个Excel文件,并使用FileResult操作将其输出,内容类型为“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”。
当试图打开它时,Excel只是说“文件已损坏,无法打开”。
当我打开用于发送输出的源代码生成的Excel文件时,它可以正常工作,没有任何问题。我还运行文件比较的字节为两个副本和文件是相同的。我试图通过电子邮件将损坏的文件发送给自己,附件打开正常。
这让我相信这是一个标题或某种Excel/Windows安全配置的问题。
如果是后者,那么我需要一个不会让客户端更改其安全设置的解决方案。
编辑-找到设置:
我已经找到了导致此问题的设置-Excel的信任中心/受保护视图设置中的“启用来自Internet的文件的受保护视图”。
所以我想问题是-有没有一种方法可以让文件看起来可信?
以下是响应头:
- 缓存控制:私有
- 内容-处置:依附;
- filename=“Report - Monday,March 19,2012.xlsx”Content-Length:20569
- Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
输出的action方法:
[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$]'') ...
提前感谢任何帮助。
2条答案
按热度按时间noj0wjuj1#
您需要在Excel文件中添加数字签名。如何从代码中做到这一点是另一个问题。
更多信息:
http://www.delphifaq.com/faq/windows_user/f2751.shtml
vaj7vani2#
这对我很有效--将文件保存为.xls,而不是. xlsx。Excel仍然会打开它,它不会显示错误。