2013-09-06 3 views
0

.NET 4.0 (C#)에서 Excel 파일을 여는 중입니다. 12.0 버전의 interop을 사용하고 있습니다. Excel 파일은 xls (이전)입니다. 잘 열어도 좋지만 workbook.close()는 그 주위에 실제 세부 사항이없는 COM 예외를 발생시킵니다.C# 종료 오류 Excel 파일 열기

oExcel = new Application(); 
oExcel.Visible = true; 
oExcel.DisplayAlerts = false; 

oBooks = oExcel.Workbooks; 
oBook = null; 
oBook = oBooks.Open(finalFilename); 

oBook.Close(); // this gives COM Exception 

내가 잘못하고있는 아이디어가 있습니까?

여기 흥미로운 점이 있습니다. 나는 이것을 구할 필요가 없다. 필요한 작업을 수행 한 후에 필요한 데이터를 가져 와서 저장하고 방금 만든 사본을 방금 사라질 수 있습니다.

답변

0

제 경험으로 볼 때, 여는 것만 큼 닫히는 오류는 파일에 문제가 있음을 나타냅니다. Excel 데스크탑은 용서할 만하며 파일에 문제가 있으면 정상적으로 처리합니다. 이 파일은 Excel에서 문제가 있음을 알리지 않고 잘 보이고 제대로 작동합니다.

Excel에서 파일을 다시 저장해보십시오. 그래도 작동하지 않으면 새로운 스프레드 시트를 만들고 이전 파일의 내용을 복사 해보십시오.

+0

그래서 빈 통합 문서를 저장하고 작동합니다. 그러나 이것은 vba/dll 코드 톤이 포함 된 생성 된 이러한 통합 문서로 작업해야하므로 옵션이 아닙니다. 이 통합 문서에는 디지털 서명이되어있는 추가 기능이있어 문제가 발생했는지 확실하지 않습니다. 나는 서명에 관심이 없지만이 가까운 이슈를 유발할 수있는 것이 무엇인지 어떻게 알 수 있습니까? – user441521

+0

나는 더 좋은 대답이없는 것이 두렵다. 통합 문서가 타사 소프트웨어에 의해 사전 생성 된 경우 여러 가지 문제가있을 수 있습니다. 내 직감은 복사 및 붙여 넣기가 조금이라도 완료 되더라도 통합 문서를 다시 만들고 두통을 많이 줄여야한다는 것입니다. – ytran

+0

감사합니다. 이것은 기본적으로 그들이 작성한 응용 프로그램이며 일반적인 통합 문서가 아니기 때문에 문제가되지 않습니다. 나는 점점 가까워지고있다. VBA에서 통합 문서를 닫는 C#의 VBA 프로젝트에 함수를 삽입했습니다. 이것은 작동하지만 C#으로 돌아 왔을 때 오류가 발생하지만 방금 무시하고 무시합니다. EXCEL.exe 프로세스가 계속 실행되는 것을 제외하고는 모든 것이 작동합니다. 내가 뭘 잘못하고 있는지 알아낼 필요가있어. – user441521

1
 Excel.Application objExcel = new Excel.Application(); 
     Excel.Workbook objWorkbook = (Excel.Workbook)(objExcel.Workbooks._Open(@"D:\a.xls", true, 
     false, Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value)); 

코드 ...

  objWorkbook.Save();   
      objWorkbook.Close(true, @"C:\Documents and Settings\Administrator\b.xls", true); 
      objExcel.Quit(); 
+0

매개 변수를 객체로 캐스팅하려고 시도합니다. – tim

+0

그래서 Save()를 호출하면 추가 기능 xla 프로젝트에 대해 "이 파일에 'addin name'이라는 파일이이 위치에 존재합니다. 그것을 대체 할 수 있습니다. 그것은 내가 실제로 거기에 그것을 볼 수 없기 때문에 파일을 연 동일한 위치에 있다고 생각하는 이유에 관해서는 나에게 이해가 가지 않습니다. 거의 그것을 마치 xla 왜 그렇게하려고하는지 모르겠다. 나는 Save()가 xla가 아니라 통합 문서 자체를 볼 것이라고 생각한다. 탁상에서 저장하면 Excel에서이 메시지를 표시하지 않는다. – user441521

+0

Excel이 종료되지 않는다. 귀하의 애플 리케이션은 여전히 ​​COM 개체에 대한 참조를 보유하고 있기 때문에. 나는 당신이 변수에 할당하지 않고 COM 개체의 적어도 하나의 멤버를 호출하는 것 같아요. com 개체와 2 점을 사용하지 마십시오 ... –