2012-02-12 6 views
1

は(D最初の悪い説明するために私を言い訳にして私は、英語で週だ)は動作しません。SaveCopyAsメソッドは

私は、ボタンのClickイベントのExcelででADDD-および保存のためのリボンでボタン(ボタンをん保存し、正確な保存措置)コードはここにあります:

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

私のアプリケーションでカスタムディレクトリにブックを手動で保存するブックの "BeforeSave"イベントハンドラにメソッド(WorkbookBeforeSave)を割り当てます。私は元のExcelの保存ボタン「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」メソッドが動作しない場合正しく動作しています。 (例外がスローされないとコードにコンパイルおよびデバッグのすべてのい)

+0

Excel interopを使用しないでください。それは非常に貧しいです。 – gdoron

+1

'_excelApp.EnableEvents = false;'は疑わしく見えます。 – gdoron

+0

私はあなたに同意します、interopを非常に悪いです。しかし、私は使用する必要があります。他に選択肢はありますか? –

答えて

0

try-catchでデバッグしようと、それはあなたのための助けになるはずです。いつか - - 遅れやロードに通常よりも遅いと保存方法でOffice 2007のExcelをタスクスレッドがなければ

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

} 

/。

単純なsaveAs()メソッドは、最新のsave-pathをC#の保存パスに変更したため、多くのパラメータを持っています(それについてはsearh、msdnは&も参照してください)。

私はSaveCopyAsソリューションを好んでいます。なぜなら、ただ1つのパラメータと高速の&が怒っているからです。 :D