Excel打开工作簿事件

Excel插件编程,当Excel打开文档时候触发某一动作。

金融行业中Excel做各种数据分析时,一般都有Excel模板,模板里面包含了很多的VBA函数,当然这些VBA函数里面有很多是自定义的,是需要与服务器交互,达到获取即时数据的目的,如股票当前价格等。这些函数需要通过计算(与服务器通信)更新模板中的内容,然后保存当前快照,从而得到一个分析数据。

这样的需求一般都需要一个重新计算的按钮,这个按钮的事件就是触发重新计算的,当然Excel中有自动的重算设置,但Excel默认的重算设置在这里是不起作用的,因为只有Excel能够捕获到某些值发生变化时才会启动重算(即使你将重算设置设成了自动重算)。

因为Excel不知道单元格的值有变化,才不会自动重算的,那么我们可以通过将单元格的值设为Dirty,即表示单元格的值发生了变化时,那么Excel就不在拒绝重算了。如:

// 保存原重算设置
Microsoft.Office.Interop.Excel.XlCalculation saveXlCalculation = Globals.ThisAddIn.Application.Calculation;
// 设为手动重算
Globals.ThisAddIn.Application.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationManual;
// 获取当前活动工作表
Microsoft.Office.Interop.Excel.Worksheet sheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
// 重算当前工作表
sheet.UsedRange.Dirty();
// 还原重算设置
Globals.ThisAddIn.Application.Calculation = saveXlCalculation;

你也可以通过变了工作簿,来重算所有工作表。

另外你可以通过,下面的代码快速计算:

// 计算所有打开的工作簿
Globals.ThisAddIn.Application.Calculate()

或者:

// 促使对所有打开工作簿中的数据进行完整计算
Globals.ThisAddIn.Application.CalculateFull();

或者:

// 对于所有打开的工作簿,强制数据的完整计算并重建从属关系。
Globals.ThisAddIn.Application.CalculateFullRebuild();

重新计算的工作可以实现了。那么很多研究员还希望在打开Excel模板文件的时候能够自动计算,不需要手动点击重算按钮了。

这是就需要一个WorkbookOpen事件:Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler,该委托需要绑定到Application.WorkbookOpen事件上,如下代码:

private void ThisAddIn_Startup(object sender, System.EventArgs e){
    Globals.ThisAddIn.Application.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(FExcelApplication_WorkbookOpen);
    // 省略其他代码
}
void FExcelApplication_WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook Wb) {
    if((new ConfigClass()).AutoCalcAfterLogih) {
        // 重新计算Wb
    }
}

这样,当研究员打开模板后Excel插件就会自动重算打开的工作簿

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值