如何用javascript在IE中打开csv文件

how to open csv file in IE in by javascript

本文关键字:csv 文件 IE 何用 javascript      更新时间:2023-09-26

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

csvWindow=window.open("/com/csv/"+csvFileName,"datacsv","工具栏=是,位置=否,目录=是,状态=否,菜单栏=是,滚动条=是,可调整大小=是,宽度=790,高度=450,屏幕X=50,屏幕Y=25,左侧=50,顶部=25");

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

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

Microsoft Office Excel无法访问该文件"http://192.168.3.228:107/com/csv/CSV_file_1345728.csv"。可能有以下几个原因:文件名或路径不存在该文件正被另一个程序使用您试图保存的工作簿与当前打开的工作簿同名。

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

请帮我做什么

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

据我所知,没有任何简单的解决方案能取得完全令人满意的结果。这里有许多解决方案,但都有缺点。

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

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

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