如何在 Excel 下载时抑制文件损坏警告?
Posted
技术标签:
【中文标题】如何在 Excel 下载时抑制文件损坏警告?【英文标题】:How to suppress the file corrupt warning at Excel download? 【发布时间】: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。 【参考方案1】:我不相信您可以对用户隐藏它。这些类型的警告在您的浏览器之外。
【讨论】:
【参考方案2】:如果您不想寻找解决方案,而只是想解决问题,请在您的注册表中插入此键以禁止通知:
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security] “扩展强化”=dword:00000000
您可以通过执行以下操作来完成上述操作:
-
打开您的注册表(开始 -> 运行 -> regedit.exe)
导航到 HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\12.0\EXCEL\SECURITY
在右侧窗口中右键单击并选择新建 -> DWORD
键入“ExtensionHardening”作为名称(不带引号)
验证数据的值为“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 有关。以上是关于如何在 Excel 下载时抑制文件损坏警告?的主要内容,如果未能解决你的问题,请参考以下文章