如何通过javascript在IE中打开csv文件

时间:2012-01-04 08:02:22

标签: javascript csv

在我的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,height=450,screenX=50,screenY=25,left=50,top=25");

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

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

 Microsoft Office Excel cannot access the file
      "http://192.168.3.228:107/com/csv/CSV_file_1345728.csv". There are several possible reasons:

      The file name or path does not exist
the file is being used by another program
the workbook you are trying yo save has the same name as a currently open workbook.

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

请帮助我该怎么办

2 个答案:

答案 0 :(得分:5)

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

我知道没有简单的解决方案,结果令人满意。以下是一些解决方案,但都有缺点。

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

答案 1 :(得分:3)

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

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