2012-02-12 7 views
1

은 (D 첫째 나쁜 설명 실례에서, 그래서 내가 영어로 주 해요) 작동하지 않습니다.SaveCopyAs 방법은

Globals.ThisAddIn.Application.ActiveWorkbook.Save(); 

:

는 나는이 Addd이-에서 Excel에서 및 저장 리본에서 버튼 (정확히 같은 저장 저장 버튼이 할 행동) 버튼의 Click 이벤트의 코드 여기 내 응용 프로그램에서 내 사용자 지정 디렉터리에 수동으로 통합 문서를 저장하는 통합 문서의 "BeforeSave"이벤트 처리기에 메서드 (WorkbookBeforeSave)를 할당합니다. 내가 원래 엑셀 저장 버튼 "SaveCopyAs"를 클릭하면

private void WorkbookBeforeSave(bool saveasui, ref bool cancel) 
{ 
    _excelApp.EnableEvents = false;//_excelApp is my Excel Application 

    if (!_excelWorkbook.Saved)//_excelWorkbook is Active Excel Workbook 
    { 
     _excelWorkbook.SaveCopyAs(_savedFilePath);//_savedFilePath is my custom directory 

     _excelWorkbook.Saved = true; 
    } 

    cancel = true; 

    _excelApp.EnableEvents = true; 
} 

문제는 방법이 있지만, 내 사용자 지정 저장 버튼을 클릭 "SaveCopyAs"방법이 작동하지 않을 때 제대로 작동합니다. 가 (예외가 슬로우되지하고 코드를 모두 컴파일 및 디버깅) try-catch으로 디버깅 할 수

+0

Excel interop을 사용하지 마십시오. 그것은 매우 가난합니다. – gdoron

+1

'_excelApp.EnableEvents = false;'는 의심스러워 보입니다. – gdoron

+0

나는 당신과 동의합니다, interop은 매우 가난합니다 탁월한. 그러나 나는 사용해야한다. 다른 가능한 선택은 무엇입니까? –

답변

0

시도를, 당신을 위해 도움이 될 것이다. 언젠가 - - 보온 또는로드에서 정상보다 느린 및 저장 방법에 오피스 2007 엑셀 태스킹 스레딩없이

// using interop, excel tool, interop-excel, core 

public void MyBeforeSave(Microsoft.Office.Interop.Excel.Workbook Wb, bool SaveAsUI, ref bool Cancel) 
{ 
    //Globals.ThisAddIn.Application.ActiveWorkbook.SaveCopyAs(filename2); // if u use an external class to save (for threading or something else) 
    this.Application.ActiveWorkbook.SaveCopyAs(filename); 

} 

/. 는 C#의 최신 저장 경로 변경 경로 저장 사용했기 때문에

간단한 saveAs() 방법

의 매개 변수를 많이 가지고, (그것을 위해 searh을, 당신도 여기 MSDN &에 참조)하고 필요 경로에서 일부 hoak.

하나의 매개 변수와 빠른 &이 분노하기 때문에 나는 SaveCopyAs 솔루션을 선호합니다. : D