不容易用一句话概括问题...
我有一个在 tomcat 7 和 Java 6 上运行的 Web 应用程序。该应用程序使用 JACOB 访问 Excel 工作表,它使用 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
手动。似乎在 Windows Server 2008 上,Excel 在以 SYSTEM 身份运行时需要此文件夹,但如果丢失则不会创建。
感谢您的提示。
最佳答案
在这里找到解决方案 link .我必须创建文件夹
C:\Windows\SysWOW64\config\systemprofile\Desktop
手动。似乎在 Windows Server 2008 上,Excel 在以 SYSTEM 身份运行时需要此文件夹,但如果丢失则不会创建它。
感谢您的提示。
关于java - 作为 Windows 服务运行时,Excel 无法读取由 Java 进程编写的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16731037/