Не легко суммировать проблемы в одном предложении ...Excel не может прочитать файл, написанный на Java процесса при работе в качестве службы Windows,
У меня есть веб-приложение работает на котом 7 с Java 6. приложение получает листы Excel с использованием JACOB, который использует JNI и COM, начиная отдельный процесс Excel. Чтобы гарантировать, что лист Excel изменен, мой Java-процесс создает копию исходного XLS с использованием File.createTempFile() и передает временный файл в процесс Excel.
ОС Windows Server 2008. Версия Excel от Office 2010.
Моей проблема: Все отлично работает до тех пор, как Tomcat запускается в интерактивном режиме из командной строки или FRM в 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, которому он не доверяет.
Как я могу предоставить Excel доступ к файлу, когда Tomcat работает как служба Windows?
EDIT: английская версия сообщения 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.
SOLUTION Найдено решение здесь link. Мне пришлось создать папку
C:\Windows\SysWOW64\config\systemprofile\Desktop
руководство пользователя. Кажется, в Windows Server 2008 Excel нуждается в этой папке при работе в качестве SYSTEM, но не создает, если отсутствует.
Спасибо за ваши намеки.
Обычно рекомендуется, чтобы вы не запускали Excel из неинтерактивного сервиса. В нем есть старый Microsoft KB. Можете ли вы использовать библиотеку, например. [Apache POI] (http://poi.apache.org/)? – Rup
[KB 257757] (http://support.microsoft.com/kb/257757): «Хотя такая программная разработка может быть реализована в клиентской системе с относительной легкостью, может возникнуть ряд осложнений, если автоматизация происходит с сервера- боковым кодом, например ... службой Windows NT ». – Rup
Это англоязычный сайт, я рекомендую вам размещать исключения на английском, а не на немецком языке. – m0skit0