【问题标题】:how to open csv file in IE in by javascript如何通过javascript在IE中打开csv文件
【发布时间】:2012-01-04 08:02:22
【问题描述】:

在我的 asp 页面中,我必须通过 java 脚本在 IE 中打开一个 csv 文件。我使用的代码如下:

csvWindow = window.open("/com/csv/"+csvFileName, "datacsv", "toolbar=yes,location=no,directories=yes,status=no,menubar=yes,scrollbars=yes,resizable=yes,width =790,高度=450,screenX=50,screenY=25,left=50,top=25");

代码正在 IIS 服务器中运行。

当我运行此代码并打开 csv 文件时,它会给出以下消息

 Microsoft Office Excel 无法访问该文件
      “http://192.168.3.228:107/com/csv/CSV_file_1345728.csv”。有几个可能的原因:

      文件名或路径不存在
该文件正被另一个程序使用
您正在尝试保存的工作簿与当前打开的工作簿具有相同的名称。

但是正在创建文件。所以路径是正确的,我认为该文件也没有被另一个程序使用

请帮助我该怎么办

【问题讨论】:

  • 在您调用它时确保该文件存在于指定位置(如错误消息所述)。那么,一切都会好起来的。
  • @Baszz,是的文件存在于该位置,但在 IE 中,当我粘贴相同的 url“192.168.3.228:107/com/csv/CSV_file_1345728.csv”时,也会显示此消息,所以你能告诉我有什么问题吗?任何其他打开文件的方法
  • 您是否尝试过重命名您的 csv 文件?我的意思是,给它一个简单的名称并检查它是否包含任何特殊字符。
  • 你是如何创建文件的?如果以编程方式,您是否在完成后关闭与它的所有连接(例如 Scripting.TextStream)?
  • @oracle 认证专业人士,是的,我正确地关闭了文件

标签: javascript csv


【解决方案1】:

问题在于,当 Excel 打开时,它会尝试获取 CSV 文件本身,这是自 2007 年以来办公应用程序中的行为变化。但是,由于 Excel 在不同的进程中运行,它不会发送任何本来会发送的 cookie登录时生成。当网站收到请求时,它将以 401 状态响应。

据我所知,没有任何简单的解决方案可以得到完全令人满意的结果。这里有一些解决方案,但都有缺点。

  • 使身份验证 cookie 持久化,这将允许 Office 应用程序获取并发送 cookie。不利的一面是,即使在客户端计算机重新启动后,用户仍会持续记录(很像 Stackoverflow 的工作方式)。
  • 使用标准 HTTP 身份验证协议,例如“基本”或“协商”。不利的一面是,这将导致 Excel 显示一个登录框,并且用户必须再次登录。这个缺点的一个例外是对站点注册为 IE 的 Intranet 区域的一部分的 IIS 框使用“协商”或“NTLM”,在这种情况下,excel 使用的 HTTP 堆栈将尝试使用当前用户凭据。
  • 拥有一个可以匿名运行的服务器端脚本,发送 csv 文件并在 URL 中包含一些唯一 ID(例如 GUID),这是一次性授予的访问权限。设置起来要复杂得多。

【讨论】:

  • 该代码在 Mozila firefox 上运行,但在 IE 上不运行。我使用的是 IE-7
  • @user571616:是的,因为 Firefox 使用自己的 HTTP 堆栈,它不关注 WinINET mime 处理程序。因此它只是下载 csv 然后询问“谁想要处理我拥有的这个 CSV 内容?”。另一方面,IE 使用 WinINET 并且在 windows 和 office 中具有更紧密的集成,它很早就确定所请求的资源对 excel 感兴趣,并且 Excel(或实际上是 Office)接管处理请求。
【解决方案2】:

如果你想用MS Excel打开文件,你可以尝试不直接提供文件,而是用Content-Type=application/force-download写一个ASP页面,以.css结尾的真实文件名和实际文件内容。在这种情况下,MSIE 将首先将文件下载到本地磁盘缓存,然后将其提供给 MS Excel。

如果您只想在浏览器窗口中显示 CSV 文本,最好的办法是更改其扩展名或使用 Content-Type=text/plain 制作一些代理页面,而根本不提及 CSV。关联 CSV/Excel 似乎在 MSIE 中是硬编码的。

【讨论】:

  • 有没有办法从 MSIE 中删除 csv/excel 的这种关联
  • @user571616 我不这么认为。我在提供文件响应方面有一些经验,并且我知道,例如,*.xls 将始终由 MSIE 使用 MS Excel 打开,而不管 Content-Type 和实际内容如何。自 2000 年以来,此 hack 允许打开生成的 Office HTML 页面,就好像它是二进制 Office 文档一样。
猜你喜欢
  • 2014-05-30
  • 2013-11-20
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2016-11-16
  • 2011-08-14
  • 2011-06-21
相关资源
最近更新 更多