2010-06-16 7 views
2

"DataSheet.xls"라는 Excel 파일이 열려 있다고 가정 해 보겠습니다. C#을 사용하여 Excel 파일을 어떻게 삭제할 수 있습니까?Excel에서 통합 문서를 프로그래밍 방식으로 닫는 중

+1

excel 응용 프로그램, excel.exe를 종료 하시겠습니까, 아니면 통합 문서 datasheet.xls를 닫으시겠습니까? – simendsjo

+0

통합 문서 datasheet.xls를 닫으시겠습니까 – Rabin

답변

5
using Excel = Microsoft.Office.Interop.Excel; 
(...) 
var app = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 
// I have english excel, but another culture and need to use english culture to use excel calls... 
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 
app.Workbooks["DataSheet"].Close(false, false, false); 
+0

도움 주셔서 대단히 감사합니다. – Rabin

+0

FormClosed 또는 FormClosing에서 작동하지 않는 이유가 있습니까? – Rabin

+0

하지 않아야합니다. 전화가 걸렸습니까? – simendsjo

0

손바닥에 코드가 없습니다. 하지만 일반적으로 과거에는이 작업을 수행하기 위해 몇 가지 API 호출을 사용했습니다. 먼저 창 핸들 (hWnd)을 얻은 다음 wm_close 매개 변수와 함께 sendmessage API 호출을 사용합니다. 내가 좀 물건 것을해야 할 일을했을 때부터이 - 그것은 기억할 수에 대한 모든입니다

약 10 세이었다, 그래서 필드

+0

도움을 주셔서 대단히 감사합니다. – Rabin

1

Process 클래스를 사용하면 프로세스를 죽일 수있는 것이다 다음 : 이후 변경되었을 수 있습니다. 실행중인 모든 excel.exe 프로세스를 검사하고 프로세스의 주 창 핸들을 가져 와서 해당 창의 캡션에 XLS 파일의 이름이 포함되어 있는지 확인한 다음 해당 창에 대한 프로세스를 종료 할 수 있습니다.

그렇지 않으면 Office COM 클래스를 사용하여 Excel과 대화 할 수 있습니다. 이렇게하면 열려있는 통합 문서를 종료 할 수도 있습니다.

+0

도움 주셔서 대단히 감사합니다. – Rabin

2

단일 프로세스에 열려있는 통합 문서가 여러 개 포함될 가능성이 큽니다. 특히 Excel은 각 통합 문서에 대해 새 프로세스를 만드는 대신 Explorer, Outlook 등에서 파일을 열 때 기존 인스턴스를 다시 사용하기를 선호하기 때문에 특히 그렇습니다.

프로세스를 죽이는 것은 물론 1) 저장되지 않은 변경 사항이있는 경우 프롬프트를 표시하는 기본 창을 닫거나 2) 강제로 다음 단계에서 Excel에서 충돌 복구 옵션을 표시하게하는 프로세스를 강제 종료해야합니다. 그것을 시작하십시오.

Excel COM API를 사용하여 통합 문서를 닫는 것이 가장 좋습니다. Marshal.GetActiveObject 메서드를 사용하여 실행중인 Excel 인스턴스를 가져온 다음 Office 개발자 참조에서 특정 명명 된 통합 문서를 확인하지 않고 닫는 방법에 대한 자세한 내용을 참조 할 수 있습니다.

+0

도움 주셔서 대단히 감사합니다. – Rabin

관련 문제