在C#中保存为事件

Nik*_*hil 2 c# vsto visual-studio-2010

我使用VSTO(C#)为excel开发了一个插件.

我希望知道工作簿在运行时" 保存为" .即.用户在WBK 1上执行某些操作,然后使用SAVE AS保存工作簿,然后重命名工作簿并再次开始处理它.那么在这种情况下是否可以捕获'Worlbook SAve AS'事件?

JMK*_*JMK 5

Application.WorkbookAfterSave事件传入一个名为的WorkBook对象wb和一个名为的布尔值Success.

您可以从Workbook对象的FullName属性中获取保存为文件名.也许您可以将初始名称存储在变量中,并在AfterSave事件上比较名称和位置,以查看是否已按如下方式使用"另存为":

using Excel = Microsoft.Office.Interop.Excel;
using System;

namespace ExcelAddIn1
{
    public partial class ThisAddIn
    {
        private string CurrentFullName { get; set; }
        private event EventHandler SaveAs;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            CurrentFullName = this.Application.ThisWorkbook.FullName;

            this.Application.WorkbookAfterSave += new Excel.AppEvents_WorkbookAfterSaveEventHandler(Application_WorkbookAfterSave);

            SaveAs += new EventHandler(ThisAddIn_SaveAs);
        }

        void ThisAddIn_SaveAs(object sender, EventArgs e)
        {
            //Do What I want to do if saved as
        }

        void Application_WorkbookAfterSave(Excel.Workbook Wb, bool Success)
        {
            if (Wb.FullName != CurrentFullName)
            {
                CurrentFullName = Wb.FullName;
                SaveAs.Invoke(null, null);
            }
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)