問題を一言で要約するのは簡単ではありません...
Tomcat 7 と Java 6 で実行されている Web アプリがあります。このアプリは JNI と COM を使用する JACOB を使用して Excel シートにアクセスし、別の Excel プロセスを開始します。Excel シートが変更可能であることを確認するために、私の Java プロセスは File.createTempFile() を使用して元の 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 がファイルにアクセスできないことを意味します。
ファイルが存在し、読み取り可能な Excel ドキュメントであることを確認しました (Excel を使用して対話的に開くことができます)。
私の推測では、Windows は、信頼していない Java プロセスによって作成されているため、EXCEL サブプロセスのファイルへのアクセスを拒否していると思われます。
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.
解決策 こちらのリンク で解決策を見つけました。フォルダを作成する必要がありました
C:\Windows\SysWOW64\config\systemprofile\Desktop
手動で。Windows Server 2008 では、Excel は SYSTEM として実行するときにこのフォルダーが必要ですが、存在しない場合は作成されません。
ヒントをありがとう。