2012-02-12 117 views
1

(我上週在英語,所以剛開始原諒我的不好解釋:d)SaveCopyAs方法不起作用

我打開一個Excel文件通過我的申請

我有一個ADDD在Excel和帶狀一個按鈕保存(正是這樣一個拯救的行動,保存按鈕做的)按鈕的Click事件的代碼是在這裏:

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

在我的應用中,我將一個方法(稱爲WorkbookBeforeSave)分配給工作簿的「BeforeSave」事件處理程序,該工作簿可以在我的自定義目錄中手動保存工作簿。

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; 
} 

問題是,當我點擊原始Excel保存按鈕「SaveCopyAs」法正常工作,但是當點擊我的自定義保存按鈕「SaveCopyAs」方法不起作用。 (也不例外已經拋出所有代碼的編譯和調試)

+0

不要使用excel interop。它很差。 – gdoron 2012-02-12 08:03:25

+1

'_excelApp.EnableEvents = false;'看起來很可疑。 – gdoron 2012-02-12 08:04:40

+0

我同意你的看法,excel互操作性非常差。但我必須使用。什麼是其他可用的選擇? – 2012-02-12 09:25:50

回答

0

嘗試try-catch調試,應該對你有所幫助。

// 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); 

} 

不必穿線/任務Office 2007的Excel的 - 有時 - 滯後或加載比平時慢,並在保存方法。

簡單saveAs()方法有很多的參數(searh它,你看到它在MSDN上&這裏太)及其需要一些hoak的路徑,因爲用於保存路徑最新的保存路徑更改爲C#。

我更喜歡SaveCopyAs解決方案,因爲只有一個參數和快速&憤怒。 :D