2

(私は英語が苦手なので、まず説明が下手ですみません :D )

アプリケーションで Excel ファイルを開きます。

Excelにアドインがあり、リボンに保存用のボタンがあります(保存ボタンが行う保存アクションとまったく同じです)ボタンのクリックイベントのコードは次のとおりです。

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

私のアプリケーションでは、ワークブックを手動でカスタム ディレクトリに保存するワークブックの「BeforeSave」イベント ハンドラにメソッド (WorkbookBeforeSave と呼ばれる) を割り当てます。

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」メソッドが機能しないことです。 (例外はスローされず、すべてのコードがコンパイルおよびデバッグされました)

4

1 に答える 1

1

でデバッグしてみてください 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()方法には多くのパラメーターがあり (検索すると、msdn とここでも表示されます)、C# への最新の保存パスの変更で保存パスが使用されたため、パスにフックが必要です。

SaveCopyAsパラメータが1つだけで、猛烈な勢いで速いので、私は解決策を好みます。:D

于 2012-08-10T15:17:58.367 に答える