在C# XLL(使用ExcelDNA的Excel加载项)中,如何检测工作簿何时关闭?

8ehkhllq  于 2023-11-20  发布在  C#
关注(0)|答案(1)|浏览(155)

我有一个使用ExcelDNA在C#中构建的XLL,它包含一些用于普通XLSX工作簿中计算的UDF。我希望外接程序对工作簿本身中的BeforeClose事件执行一些操作,而不必将工作簿更改为具有自己的事件处理程序的XLSM文件。如何让我的XLL从Excel应用程序捕获“工作簿正在关闭”事件,然后获取该Workbook的引用(实际上只需要它的文件名就可以了),这样我就可以在文件实际关闭之前对它运行一些操作?

bihw5rsg

bihw5rsg1#

通过nuget安装NetOffice Framework:
https://netoffice.io/
现在,在加载项的AutoOpen中,您可以创建一个Application对象,该对象允许您访问所有COM内容,包括事件。
我使用的是F#,而不是C#,但这是我的情况:

open NetOffice.ExcelApi
open NetOffice.ExcelApi.Enums

module AddIn =
    let mutable private myApp : Application = null

    let beforeClose = Application_WorkbookBeforeCloseEventHandler (fun sender e -> 
        // do something here - sender is the workbook
        ())

    // I call this from my type I define that implements IExcelAddIn
    let autoOpen() = 
        myApp <- new Application (null, ExcelDnaUtil.Application)
        myApp.add_WorkbookBeforeCloseEvent beforeClose

字符串

相关问题