不容易在一句话中总结这个问题…
我有一个在Java 6上运行的Tomcat 7上的Web应用程序。该应用程序访问Excel工作表使用JACOB,它使用JNI和COM,启动一个单独的Excel进程。 为了确保Excel工作表是可变的,我的Java进程使用File.createTempFile()创build原始XLS的副本,并将临时文件传递给Excel进程。
OS是Windows Server 2008. Excel版本来自Office 2010。
我的问题:只要Tomcat是从命令行或者从IDE开始交互式启动的,一切正常。 如果我启动Tomcat作为服务(使用默认用户SYSTEM),Excel无法打开临时文件,并说:
com.jacob.com.ComFailException: Invoke of: Open Source: Microsoft Excel Description: Microsoft Excel kann auf die Datei 'C:\Program Files\apache-tomcat\temp\Entwickl-Auftr-Bez-n-Maß 54-131 215-2 Optimierung 210-0 210-3.xlsx6119727457676255726.clone' nicht zugreifen. Dies kann mehrere Gründe haben: • Der Name des Dokuments oder der Pfad ist nicht vorhanden. • Das Dokument wird von einem anderen Programm verwendet. • Der Name der Arbeitsmappe, die gespeichert werden soll, ist identisch zu dem Namen eines anderen Dokuments, welches schreibgeschützt ist. com.jacob.com.Dispatch.invokev(Native Method) com.jacob.com.Dispatch.invokev(Unknown Source) com.jacob.com.Dispatch.callN(Unknown Source) com.jacob.com.Dispatch.call(Unknown Source) de.insites.ms.com.xls.Workbook.<init>(Unknown Source) de.insites.ms.com.xls.Excel.openWorkbook(Unknown Source) de.harti.harticalc.excel.MahanoExcel.<init>(Unknown Source) de.harti.harticalc.excel.MahanoExcel.create(Unknown Source) de.harti.harticalc.excel.ExcelProcessor.getExcel(Unknown Source) de.harti.harticalc.excel.ExcelProcessor.calculatePosition(Unknown Source) de.harti.mahano.service.PositionServlet.doGet(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) de.harti.mahano.service.AbstractMahanoWsServlet.service(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) de.harti.mahano.service.CharsetFilter.doFilter(Unknown Source)
德语信息意味着Excel无法访问该文件,因为该文件不存在,被另一个进程locking或以某种方式写入locking。
我validation了文件存在,它是一个可读的Excel文档(我可以使用Excel交互式地打开它)。
我的猜测是,Windows拒绝EXCELsubprocess访问我的文件,因为它是由它不信任的java进程创build的。
当Tomcat作为Windows服务运行时,如何让Excel访问该文件?
编辑 :exception消息的英文版本
ERROR - Invoke of: Open Source: Microsoft Office Excel Description: Microsoft Office Excel cannot access the file 'c:\marchena\marchena10\work\marchena\batch_58288\input\content_1.xlsx'. 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 to save has the same name as a currently open workbook.
解决scheme在这里find解决scheme 我不得不创build文件夹
C:\Windows\SysWOW64\config\systemprofile\Desktop
manualy。 似乎在Windows Server 2008上,当以SYSTEM身份运行时,Excel需要此文件夹,但如果缺less,则不会创build。
感谢您的提示。
这里找到解决方案的链接 。 我不得不创建文件夹
C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \桌面
manualy。 似乎在Windows server 2008上,Excel作为SYSTEM运行时需要此文件夹,但如果缺失则不会创建它。
感谢您的提示。