【问题标题】:How to suppress the file corrupt warning at Excel download?如何在 Excel 下载时抑制文件损坏警告?
【发布时间】:2010-10-30 17:10:37
【问题描述】:

我有一个链接到 Excel 2007 工作表的网页。这是一个.xls 文件,而不是.xlsx 文件。当我单击链接时,我会看到通常的对话框来打开/保存 Excel 文件。单击“打开”时,我收到以下警告消息-

您尝试打开的文件, 'filename.xls' 在不同的 比文件指定的格式 延期。确认文件不是 已损坏且来自受信任的来源 在打开文件之前。你想要 现在打开文件?

我能否以编程方式抑制此警告消息(即隐藏它或阻止它显示?)我正在使用 ColdFusion 进行 Web 开发。

【问题讨论】:

  • 为什么不将扩展名保留为 .XLSX?
  • 这是针对一个特定的 XLS 文件,还是针对您尝试的每个 XLS 文件?您是否考虑过相关文件实际上可能已损坏的可能性?如果是每个 XLS 文件,那么它听起来像是一个 Excel/Windows 选项,您无法通过 ColdFusion(或任何其他服务器端语言)在用户计算机上控制它。
  • 亚当,这是一个新的 Excel '功能' - 之前你可以简单地生成一个 CSV 文件或 HTML 表并将其命名为 XLS,但现在每次打开文件时都会出现一个愚蠢的对话框(除非个别客户禁用它)。
  • 你可以尝试使用SheetJS,参考我的回答here

标签: excel coldfusion


【解决方案1】:

我不相信您可以对用户隐藏它。这些类型的警告在您的浏览器之外。

【讨论】:

    【解决方案2】:

    如果您不想寻找解决方案,而只是想解决问题,请在您的注册表中插入此键以禁止通知:

    [HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security] “扩展强化”=dword:00000000

    您可以通过执行以下操作来完成上述操作:

    1. 打开您的注册表(开始 -> 运行 -> regedit.exe)
    2. 导航到 HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\12.0\EXCEL\SECURITY
    3. 在右侧窗口中右键单击并选择新建 -> DWORD
    4. 键入“ExtensionHardening”作为名称(不带引号)
    5. 验证数据的值为“0”

    【讨论】:

    • 谢谢乔恩。我可以以编程方式执行此操作,例如使用冷融合吗?
    • 我的解决方法是针对单个本地计算机。据我所知,网络应用程序将无法编辑注册表。
    【解决方案3】:

    这个问题是由一个叫做扩展强化的特性引起的,你可以找到更多关于它的信息here

    我在项目中经常遇到这个问题,正如 Jon 所说,关闭扩展强化是每个客户端用户都必须完成的事情。

    不幸的是,上面的链接还指出,至少在 Office 14 之前,此代码不会发生预期变化。

    【讨论】:

    • 我认为这仅适用于您使用 CSV 并另存为 XLS 的情况。但是,如果你构建一个真正的 excel 文件,那么它应该没问题。 CF9 cfspreadsheet 将成为您的朋友。 :)
    • 我同意@Henry,我刚刚在尝试使用 FileWriter 类打开从 Java 中的 JTable 导出的 .xls 文件时遇到此警告消息。
    【解决方案4】:

    消息表明文件内容和文件扩展名不匹配。因此,要么是 XLSX 文件,要么服务器上的当前文件以某种方式损坏。我建议尝试使用 ZIP 工具打开文件。如果可行,它实际上是一个 XLSX 格式的文件。然后您可以通过重命名文件来修复警告。

    如果不是这样,文件出了问题。

    但无论哪种方式,抑制警告都不能解决您的问题。下次病毒出现并要求您的客户打开 nakedgrls.gif.exe 时,您最好不要弄乱安全设置。

    【讨论】:

      【解决方案5】:

      如果您使用方便的 cfcontent 技巧来输出为 excel 文件,请考虑使用 cfx_query2excel,它会编写真正的 excel 文件,可以帮助您解决这个问题。这是一个 Java 库,值得。

      祝你好运。

      【讨论】:

        【解决方案6】:

        如果您没有指定文件扩展名,它可能会被命名为内容类型为“application/vnd-excel”的 .cfm 文件,从而导致此警告。

        尝试在文件输出开始之前添加:

        <cfheader name="Content-Disposition" value="attachment;filename=myexcelfile.xls">
        <cfcontent type="application/ms-excel" reset="true">
        

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题,客户抱怨它。我做了很多谷歌搜索,但没有运气。最后我使用 cfspreadsheet 创建了电子表格,我知道它需要额外的工作而不是直接通过 HTML 创建,但它删除了警告。

          【讨论】:

            【解决方案8】:

            对于旧的 Excel 格式 (.xls)

            假设您使用以下语法创建电子表格对象:

            <cfset sheet = SpreadsheetNew() /> 
            

            您将使用它来创建下载:

            <cfheader name="content-disposition" value="attachment;filename=my_spreadsheet.xls">
            <cfcontent type="application/vnd.ms-excel" variable="#spreadsheetReadBinary(sheet)#" reset="true">
            

            对于较新的 Excel 格式 (.xlsx)

            使用以下语法创建电子表格对象:

            <cfset sheet = SpreadsheetNew("", "true") />
            

            并使用它来创建下载:

            <cfheader name="content-disposition" value="attachment;filename=my_xml_spreadsheet.xlsx">
            <cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#spreadsheetReadBinary(sheet)#" reset="true">
            

            感谢Raymond Camden 提供的大部分内容(他的示例是用旧格式创建电子表格——我更新了新格式并使用了稍微不同的 MIME 值)。

            【讨论】:

            • 虽然这适用于我的 CF9 服务器,但不适用于 CF11。它说,由于文件格式或文件尾端无效,文件无法打开。 CF11还有别的吗?我必须在服务器上安装 OpenOffice 吗?当将文件作为电子邮件附件发送时,它可以工作。可能与 IIS 有关。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-09-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-01
            • 1970-01-01
            • 2015-01-17
            相关资源
            最近更新 更多