如何在Excel下载时抑制文件损坏警告?

如何在Excel下载时抑制文件损坏警告?,excel,coldfusion,Excel,Coldfusion,我有一个链接到Excel2007工作表的网页。它是.xls文件,而不是.xlsx文件。当我点击链接时,我会看到一个通常的对话框来打开/保存Excel文件。单击“打开”,我收到以下警告消息- 您试图打开的文件, “filename.xls”的格式不同 格式超出了文件指定的格式 分机。请确认该文件未被删除 已损坏并且来自受信任的源 在打开文件之前。你想要什么 现在打开文件吗 我正在使用ColdFusion进行web开发。我不相信您可以对用户隐藏此警告消息。这些类型的警告在浏览器外部。如果您不想寻找解

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

您试图打开的文件, “filename.xls”的格式不同 格式超出了文件指定的格式 分机。请确认该文件未被删除 已损坏并且来自受信任的源 在打开文件之前。你想要什么 现在打开文件吗


我正在使用ColdFusion进行web开发。

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

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

[HKEY\U当前用户\软件\ Microsoft\Office\12.0\Excel\Security] “扩展强化”=dword:00000000

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

  • 打开注册表(开始->运行->regedit.exe)
  • 导航至HKEY\U CURRENT\U USER\SOFTWARE\MICROSOFT\OFFICE\12.0\EXCEL\SECURITY
  • 在右侧窗口中单击鼠标右键,然后选择“新建->DWORD”
  • 键入“extensionharding”作为名称(不带引号)
  • 验证数据是否具有值“0”

  • 这个问题是由一个名为扩展强化的特性引起的,您可以找到有关它的更多信息

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


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

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

    如果不是这样的话,文件就出了问题


    但不管怎样,抑制警告并不是解决问题的方法。下次病毒出现并要求您的客户打开<代码> NKEDDGRLS。GIF。exe < /> >,您最好不要弄乱安全设置。

    < P>如果您使用便利CF内容技巧作为Excel文件输出,请考虑使用CFXQueQue2Excel,它将写入。真正的excel文件应该能让你克服这个问题。这是一个Java库,值得


    祝您好运。

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

    在文件输出开始之前,尝试添加以下内容:

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

    我也遇到过类似的问题,客户对此表示不满。我在谷歌上搜索了很多次,但运气不佳。最后,我使用cfspreadsheet创建了电子表格,我知道这比直接通过HTML创建电子表格需要更多的工作,但它删除了警告。

    对于旧的Excel格式(.xls) 假设使用以下语法创建电子表格对象:

    <cfset sheet = SpreadsheetNew() /> 
    
    <cfset sheet = SpreadsheetNew("", "true") />
    
    
    
    您可以使用此选项创建下载:

    <cfheader name="content-disposition" value="attachment;filename=my_spreadsheet.xls">
    <cfcontent type="application/vnd.ms-excel" variable="#spreadsheetReadBinary(sheet)#" reset="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">
    
    
    
    对于较新的Excel格式(.xlsx) 使用以下语法创建电子表格对象:

    <cfset sheet = SpreadsheetNew() /> 
    
    <cfset sheet = SpreadsheetNew("", "true") />
    
    
    
    并使用此选项创建下载:

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

    多亏了(他的例子是用较旧的格式创建电子表格——我更新了较新的格式,并使用稍有不同的MIME值).

    谢谢Jon。我可以用编程的方式,比如说使用coldfusion吗?我的解决方法是针对一台本地计算机。据我所知,一个Web应用程序将无法编辑注册表。为什么不将扩展名保留为.XLSX?这是针对一个特定的XLS文件,还是针对您尝试的每个XLS文件?您是否考虑过一个文件在stion实际上可能已损坏?如果它是每个XLS文件,那么它听起来像Excel/Windows选项,您无法通过ColdFusion(或任何其他服务器端语言)在用户计算机上控制它.Adam,这是一个新的Excel“功能”-在您可以简单地生成CSV文件或HTML表并将其命名为XLS之前,但现在每次打开该文件时都会出现一个愚蠢的对话框(除非个别客户端禁用它)。您可以尝试使用SheetJS,请参考我的答案。我认为这仅适用于您使用CSV并另存为XLS的情况。但是,如果您构建一个真正的excel文件,则应该可以。CF9 cfspreadsheet将是您的朋友。:)我同意@Henry的观点,我在尝试打开从中的JTable导出的.XLS文件时遇到了此警告消息java使用FileWriter类。虽然这在我的CF9服务器上有效,但在CF11上不起作用。它说,由于文件格式或文件endig无效,文件无法打开。CF11上还有其他内容吗?我必须在服务器上安装OpenOffice吗?它在将文件作为电子邮件附件发送时起作用。可能与IIS有关。