문제

나는 사무실 제품 UI를 자동화하는 것이 지원되지 않는다는 Microsoft Support Base Article을 잘 알고 있습니다. 그것은 것 같습니다 Windows Server 2008 X64 및 Excel 2007 주어진 진술을 시행합니다.

NT 서비스 (로컬 시스템 계정) onstart 메소드에서 다음 코드를 실행하고 있습니다. 콘솔 애플리케이션에서 동일한 코드를 실행할 때 작동하는 방식으로 Excel Automation 만하면됩니다.

제공된 코드에는 두 부분이 있습니다. 첫 번째 부분은 Excel을 시작하고 새로운 워크 북을 생성하여 주어진 파일 이름에 저장합니다. 두 번째 부분은 새로운 Excel 인스턴스를 시작하고 주어진 파일을 엽니 다. 열린 작업은이 예외에서 끝납니다.

서비스를 시작할 수 없습니다. System.Runtime.interOpServices.comexception (0x800a03ec) : Microsoft Office Excel은 'C : temp test.xls'파일에 액세스 할 수 없습니다. 가능한 몇 가지 이유가 있습니다.

• 파일 이름 또는 경로가 존재하지 않습니다. • 파일은 다른 프로그램에서 사용 중입니다. • 저장하려는 통합 문서는 현재 열린 통합 문서와 동일한 이름을 가지고 있습니다.

자동화 된 Excel이 파일을 디스크에 시작하고 쓸 수있는 이유는 무엇입니까? 그러나 "단지"기존 파일을 열어야 할 때 실패합니까?

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
도움이 되었습니까?

해결책

솔루션은 정말 간단합니다. MSDN 포럼 스레드를 찾을 수 있습니다 여기

긴 이야기를 짧게 만들기 위해 여기에 솔루션을 게시하고 있습니다. 신용은 H OGAWA

이 솔루션은 ...

Windows Windows 2008 서버 X64

이 폴더를 만드십시오.

C : Windows Syswow64 config SystemProfile Desktop

Windows Windows 2008 서버 X86

이 폴더를 만드십시오.

C : Windows System32 Config SystemProfile Desktop

... dcomcnfg.exe 대신.

이 작업은 내 시스템에서 사무실 자동화 문제를 제거했습니다.

SystemProfile 폴더에서 Desktop 폴더가 Excel을 통해 파일을 엽니 다.

Windows2008에서 사라지고 Windows2003에는 폴더가 있었으며이 오류가 발생한다고 생각합니다.

다른 팁

소스에서 언급 한 것처럼 데스크탑 폴더의 올바른 권한을 설정해야합니다. 이것은 Windows 2008-64bits 및 Office 2010 32bits에서 저를 위해 작동했습니다.

  1. 디렉토리 "c : windows syswow64 config SystemProfile Desktop"(64 비트 Wind

  2. 사용자 "Network Services (Service Réseau)"생성 된 폴더의 다음 권한을 지정하십시오.

읽기 및 실행, 폴더 내용을 나열하고 읽습니다

남자.

나는 종종 quit ()가 리소스를 공개하기에 충분하지 않다는 것을 자주 발견했습니다. 추가 시도 : -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

quit () 문과 null로 설정합니다.

Windows Server 2007 64 비트에서 Excel을 작동시키기 위해 작업해야한다고 언급 한 것보다 더 많은 오류가 있습니다. 보다 내가 해결 한 단계 이틀 동안 2 일 동안 작업 한 후!

Apache를 사용하는 경우 MS Word가 올바르게 작동하도록하기 위해 다음 단계를 수행해야 할 수도 있습니다 (다른 답변에 요약 된 모든 것과 함께).

아래는 다음과 같은 두 대화를 보여주는 스크린 샷입니다.enter image description here

아파치 용 :

Services-> apache-> 마우스 오른쪽 버튼을 클릭 (속성)-> 로그온 탭

MS Word :

dcomcnfg.exe-> 콘솔 루트-> 컴포넌트 서비스-> 컴퓨터-> 내 컴퓨터-> dcom config-> microsoft 응용 프로그램 찾기-> 오른쪽 클릭 (속성)-> ID

** MS 단어를 찾을 수없는 경우 설치 한 사무실 버전에 따라 올바른 DCOM 구성 (64 비트 대 32 비트)을 시작하는지 확인하십시오.

여기에는 두 가지 옵션이 있습니다. Apache를 사용할 수 있습니다. 로컬 시스템 계정 데스크탑 상호 작용을 허용하도록 확인란을 확인하십시오. 이 작업을 수행하면 설정해야합니다. 신원 MS Word를 위해 대화식 사용자.

그렇지 않으면 그림에 표시된 것과 같이 동일한 사용자 (로그인 된 사용자)로 둘 다 설정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top