如何捕获在java Web应用程序中关闭打开的excel文件的事件

时间:2013-11-26 15:35:25

标签: java javascript excel jsp

我正在研究一个java Web应用程序。出于安全原因,当用户从网页上单击打开的文件链接时,应用程序会将文件从安全性文件夹复制到临时文件夹,每个人都可以访问该文件夹,然后打开它。用户完成读取excel文件并关闭后,我需要捕获此关闭事件并从临时文件夹中删除该文件,以便其他任何人都无法看到该文件。

通过jsp页面中的javascript打开excel文件,代码如下:

var myApp = new ActiveXObject("Excel.Application");
myApp.visible = true;
myApp.workbooks.open(fileNameWithTypeAndPath);  

但我不知道如何捕捉结束的excel事件。


我已经通过使用运行时waitfor()尝试了另一种方式。代码如下

Runtime rt=Runtime.getRuntime();            
Process proc= rt.exec("cmd.exe /c C:\\peter\\workspace\\Temp\\Translation.xlsx ");                      
InputStream stderr= proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while((line= br.readLine())!=null)
{
    System.out.println(line);
}
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: "+exitVal);

然而,这是一个Web应用程序,执行时

Process proc= rt.exec("cmd.exe /c C:\\peter\\workspace\\Temp\\Translation.xlsx ");

它在Web服务器上运行,而不是在用户的计算机上运行。

感谢您对此问题的任何建议!

1 个答案:

答案 0 :(得分:0)

"It is running on web server, not user's machine." 

你回答了自己的问题。它无法完成。您的所有JSP / Servlet都可以将内容发送到客户端的webbrowser。它无法访问文件系统。并且Excel无法向您发送关闭事件。

您应该研究如何从servlet正确地提供二进制文件,而不是使用Javascript打开或尝试在Java中使用命令行调用(只需在服务器上打开它)。

但是当用户关闭文件时,这仍然无法解决从系统上的临时文件夹中删除文件的问题。你不能这样做。您可以在为Excel文件提供服务的servlet上设置no-cache标头(如果您正确提供),但这只会使浏览器提取最新文件。当用户关闭文件时,它不会从临时文件夹中删除Excel。

以下是如何正确提供文件的基本要点:

response.setContentType("application/msexcel");
response.addHeader("Content-Disposition", "filename=filename.xls");

然后将字节写入response.getOutputStream()。这对JSP不起作用,因此它应该是一个servlet。