Excel不想打开通过ASP输出下载的XLSX文件

时间:2012-03-19 22:52:56

标签: asp.net-mvc excel download

我使用ASP MVC3框架,创建了一个Excel文件,并使用内容类型为“ application / vnd.openxmlformats-officedocument.spreadsheetml.sheet ”的FileResult操作输出。

尝试打开Excel时,只是说“文件已损坏,无法打开。”

当我打开用于发送输出的源生成的Excel文件时,它可以正常工作。我还对两个副本的字节运行文件比较,文件是相同的。我试图通过电子邮件将损坏的文件发送给自己,附件打开正常。

这让我相信它是标题或某种Excel / Windows安全配置的问题。

如果是后者,那么我需要一个不会让客户改变其安全设置的解决方案。

编辑 - 找到设置:

我在Excel的信任中心/受保护的视图设置中找到了导致此问题的设置 - “从源自互联网的文件启用受保护的视图”。

所以我想问题是 - 文件是否有办法可信?

以下是回复标题:

  • Cache-Control:private
  • 内容处置:附件;
  • filename =“报告 - 2012年3月19日星期一.xlsx”内容长度:20569
  • 内容类型:应用/ 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$]'')  ...

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要在Excel文件中使用数字签名。如何从代码中执行此操作是另一个问题。

更多信息:

http://www.delphifaq.com/faq/windows_user/f2751.shtml