当作为Windows服务运行时,Excel无法读取由Java进程编写的文件

时间:2013-05-24 08:51:13

标签: java windows excel jacob

不容易用一句话总结问题......

我有一个使用Java 6在tomcat 7上运行的Web应用程序。该应用程序使用JACOB访问Excel工作表,JACOB使用JNI和COM,启动单独的Excel流程。为了确保Excel工作表是可变的,我的Java进程使用File.createTempFile()创建原始XLS的副本,并将临时文件传递给Excel进程。

操作系统是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无法访问该文件,因为该文件不存在,被另一个进程锁定或以某种方式写入锁定。

我验证了文件存在,它是一个可读的Excel文档(我可以使用Excel以交互方式打开它)。

我的猜测是,Windows拒绝EXCEL子进程访问我的文件,因为它是由它不信任的java进程创建的。

当Tomcat作为Windows服务运行时,如何让Excel访问该文件?

修改: 异常消息的英文版

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.

在此处找到解决方案link。我必须创建文件夹

    C:\Windows\SysWOW64\config\systemprofile\Desktop

manualy。在Windows Server 2008上似乎Excel在以SYSTEM身份运行时需要此文件夹,但如果缺少则不会创建。

感谢您的提示。

1 个答案:

答案 0 :(得分:2)

在此处找到解决方案link。我必须创建文件夹

  

C:\的Windows \ Syswow64资料\配置\ systemprofile \桌面

manualy。在Windows Server 2008上似乎Excel在以SYSTEM身份运行时需要此文件夹,但如果丢失则不会创建它。

感谢您的提示。