2013-05-24 2 views
1

자바 6으로, 엑셀 자바 프로세스에 의해 작성된 파일을 읽을 수 없습니다

은 내가 웹 응용 프로그램은 바람둥이 7에서 실행 한 ... 하나의 문장으로 문제를 요약하기 쉽지 응용 프로그램은 별도의 Excel 프로세스를 시작하는 JNI 및 COM을 사용하는 JACOB을 사용하여 Excel 시트에 액세스합니다. Excel 시트가 변경 가능하도록 Java 프로세스는 File.createTempFile()을 사용하여 원본 XLS 복사본을 만들고 임시 파일을 Excel 프로세스로 전달합니다.

OS는 2008 년 Excel 버전의 Office에서 2010

내 문제입니다 윈도우 서버입니다 : 모든 한 Tomcat이 명령 줄에서 대화식으로 시작하거나 IDE를 FRM대로 잘 작동합니다. 잠겨,

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에서 파일을 액세스 할 수 있다는 것을 의미한다 : 나는 (기본 사용자 시스템) 서비스로 Tomcat을 시작하면 Excel이 말 임시 파일을 열려면 실패 다른 프로세스에 의해 또는 어떤 식 으로든 잠긴다.

파일이 존재하고 읽을 수있는 Excel 문서 (Excel을 대화식으로 열 수 있음)를 확인했습니다.

내 생각에, Windows는 신뢰할 수없는 java 프로세스에 의해 만들어 졌기 때문에 내 파일에 대한 EXCEL 하위 프로세스의 액세스를 거부합니다.

톰캣이 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으로 실행 중일 때이 폴더가 필요하지만 누락 된 경우 만들지 않습니다.

힌트를 보내 주셔서 감사합니다.

+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. \ WINDOWS \ SysWOW64와 \ 설정 \ systemprofile \ 바탕 화면

를 수동으로 실시 : 나는 폴더를

C를 만들 수 있었다. Windows Server 2008 에서처럼 Excel은 SYSTEM으로 실행 중일 때이 폴더가 필요하지만 누락 된 경우 만들지 않습니다.

힌트를 보내 주셔서 감사합니다.

+0

에 동일한 문제가 있습니다. 그것은 도왔다! 고마워요. – KnusperPudding

관련 문제