【问题标题】:Excel doesn't want to open XLSX files downloaded through ASP outputExcel 不想打开通过 ASP 输出下载的 XLSX 文件
【发布时间】: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


【解决方案1】:

您需要在 Excel 文件中进行数字签名。如何从代码中做到这一点是另一个问题。

更多信息在这里:

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

【讨论】:

  • 谢谢,今天晚些时候我会调查一下。
  • 祝你好运:)证书应该是受信任的,否则客户不会接受它(或需要安装在客户的个人商店中)..
  • 好的,我查看了数字签名,但有一个主要问题 - 您无法在不使签名无效的情况下修改文件。这甚至不会让数据透视表刷新,而且我希望客户能够使用提供的数据。
  • 但是当客户端第一次打开Excel文件时,该文件是否可信?客户端更改文件后文件失效是否重要?
  • 我没有测试实际下载之前因为问题排除了使用数字签名。现在我做了一个快速测试并再次得到损坏的错误,但也许我做错了什么,因为我打开文件后签名被标记为无效 - 我猜这是因为数据透视表试图修改数据。无论如何,我无法向客户提出解决方案,因为客户在打开文档时会收到错误消息。无论如何,感谢您提出这个想法。
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
相关资源
最近更新 更多