2013-05-24 1 views
1

Не легко суммировать проблемы в одном предложении ...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, но не создает, если отсутствует.

Спасибо за ваши намеки.

+0

Обычно рекомендуется, чтобы вы не запускали Excel из неинтерактивного сервиса. В нем есть старый Microsoft KB. Можете ли вы использовать библиотеку, например. [Apache POI] (http://poi.apache.org/)? – Rup

+0

[KB 257757] (http://support.microsoft.com/kb/257757): «Хотя такая программная разработка может быть реализована в клиентской системе с относительной легкостью, может возникнуть ряд осложнений, если автоматизация происходит с сервера- боковым кодом, например ... службой Windows NT ». – Rup

+0

Это англоязычный сайт, я рекомендую вам размещать исключения на английском, а не на немецком языке. – m0skit0

ответ

2

Нашли решение здесь link. Я должен был создать папку

C: \ Windows \ SysWOW64 \ Config \ systemprofile \ Desktop

Мануалы. Кажется, в Windows Server 2008 Excel нуждается в этой папке при работе в качестве SYSTEM, но не создает ее, если отсутствует.

Спасибо за ваши намеки.

+0

имел ту же проблему. это помогло! Большое спасибо – KnusperPudding