我如何知道 Excel 应用程序属性已更改例如:UseSystemSeparator或已选择自定义选项卡?

问题描述

我们在计算机上同时使用法语和英语软件,然后我们需要从“.”切换。以“,”作为小数点分隔符。为了促进这一点,我正在使用 C# Visual Studio 2017 构建一个 Excel 自定义功能区。我在功能区上放了一个选项卡、一个复选框来更改 Excel 应用程序的 UseSystemSeparators 属性,以及 2 个编辑框来显示修改 DecimalSeparator以及千位分隔符属性。当用户更改控件的值时,会触发控件的 PropertyChanged 事件,我会相应地更新应用程序属性。一切正常。当用户手动进入 Excel 并更改高级选项时会出现问题,我的选项卡上的控件不会自动更新。那么有没有办法:

是否捕获在属性 UseSystemSeparators 被修改时出现的事件,以便我可以更新我的控件?

或捕获在选择我的自定义选项卡时出现的事件,以便在显示时更新我的​​控件?

OR 将应用程序属性绑定到控件属性

到目前为止,我没有发现任何可以帮助我的东西。 UseSystemSeparators 不会引发任何事件,我还没有找到任何方法来知道何时显示我的自定义选项卡。请注意,我使用功能区设计器来构建我的自定义功能区(不是 XML)。

下面是我用来从控件更新应用程序属性代码

private void ChkUseSysteme_Click(object sender,RibbonControlEventArgs e)
    {
        Excel.Application excelObj = Globals.ThisAddIn.Application;
        if (chkUseSysteme.Checked)
        {
            excelObj.UseSystemSeparators = true;
            ebDecimal.Enabled = false;
            ebMilliers.Enabled = false;
        }
        else
        {
            excelObj.UseSystemSeparators = false;
            ebDecimal.Enabled = true;
            ebMilliers.Enabled = true;
        }

    }

    private void EbDecimal_TextChanged(object sender,RibbonControlEventArgs e)
    {
        Excel.Application excelObj = Globals.ThisAddIn.Application;
        if (!excelObj.UseSystemSeparators)
        {
            excelObj.DecimalSeparator = ebDecimal.Text;
        }
        excelObj = null;

    }

    private void EbMilliers_TextChanged(object sender,RibbonControlEventArgs e)
    {
        Excel.Application excelObj = Globals.ThisAddIn.Application;
        if (!excelObj.UseSystemSeparators)
        {
            excelObj.ThousandsSeparator = ebMilliers.Text;
        }
        excelObj = null;
    }

解决方法

据我所知,没有您可以订阅的此类事件。但作为一个想法,您可以考虑利用计时器定期(例如每 1 秒)检查 UseSystemSeparators 的值并采取相应的措施。