Exce를 사용하여 Excel 파일을 올바르게 닫고 저장하는 방법에 대한 좋은 문서를 찾는 데 어려움을 겪고 있습니다. Office Interop dll입니다.Excel Office Interop dll을 사용하여 C# .Net으로 작성된 Excel 파일 저장 및 닫기
기본적으로 새 Excel 통합 문서를 만들고 목록의 데이터로 첫 번째 워크 시트를 채우는 데 필요한 모든 작업을 수행합니다 (응용 프로그램 개체에서 visible 속성을 true로 설정하면 Excel 파일을 열어 볼 수 있음) 워크 시트는 정확히 내가 원하는 방식으로 제공됩니다.)
Excel 파일을 올바르게 닫고 선택한 위치에 저장하는 방법을 알아야합니다. 나는 코드가 완료되었을 때 Excel을 완전히 죽이고 싶습니다. 끝나면 메모리를 계속 보유하고 싶지는 않습니다.
는 지금 내가 데이터와 워크 시트를 작성 후 다음을 수행하고 내가 원하는 :
workbook.Save();
workbook.Close(Type.Missing, Type.Missing, Type.Missing);
application.Quit();
업데이트 : 지금 엑셀 내가 원하는 위치에 파일을 저장 할 수 있어요. 간단히 Save() 호출을 제거하고 Close 호출을 (true, filePath, Type.Missing)으로 변경했으며 이제 파일을 원하는 위치에 저장합니다.
COM 개체를 올바르게 닫는 것이 문제 해결에만 있습니다.
가능한 해결책 최소한이 코드는 실행이 완료 될 때마다 작업 관리자에서 Excel을 제거하는 것처럼 보입니다.
// Close the workbook, tell it to save and give the path.
workbook.Close(true, workbookPath, Type.Missing);
// Now quit the application.
application.Quit();
// Call the garbage collector to collect and wait for finalizers to finish.
GC.Collect();
GC.WaitForPendingFinalizers();
// Release the COM objects that have been instantiated.
Marshal.FinalReleaseComObject(workbook);
Marshal.FinalReleaseComObject(worksheet);
Marshal.FinalReleaseComObject(workrange);
Marshal.FinalReleaseComObject(application);
나는 이것이 효과가 있다고 믿는다. 문제는 내가 인스턴스화 한 모든 것을 공개하지 않고 GC가 강제로 수집하도록 강요하는 것이 마지막 누락 된 부분이라고 생각합니다. 이 작업을 20 번 실행하고 작업 관리자가 Excel을 표시하고 코드가 완료되면 제거합니다.
최종 업데이트 : 위의 코드는 모든 COM 개체를 삭제하고 있으며 모든 것이 제대로 작동하고 있습니다.
보기 ... 항상 모든 cicumstances에서 .NET에서 COM 개체를 제거하지만
Quit()
에 대한 호출 후Marshal.FinalReleaseComObject (application); application = null;
를 추가하는 것은 당신의 기회를 증가하려면에는 100 % 방법이 없습니다 그 말이 내게 보이는데, 당신이 옳은 일을하지 않을 수도 있다고 의심하게 만드는 것은 무엇입니까? – Mathias코드가 실행 된 후에도 여전히 Excel이 작업 관리자에 표시됩니다. 단지 거기에 머무르고 메모리를 차지하지 않으려는 경우에만 필요합니다. –
그렇다면 문제는 Excel을 닫는 것이 아니라 다른 Excel 개체를 삭제하는 것입니다. 당신을 도울 수있는이 StackOverflow 질문을 확인하십시오. http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects-in-c – Mathias