Excel 2007如何通过程序最小化功能区,但不是菜单栏?

7
在Excel 2007中,我们可以右键单击功能区并选择“最小化功能区”来将其最小化。
我已经尝试过。
Application.ExecuteExcel4Macro("show.toolbar(\"ribbon\",false)");

隐藏整个功能区,但我不想隐藏整个功能区。

我甚至尝试过

 Application.SendKeys("^{F1}", true);

但是它不太可靠,有时无法正常工作。

enter image description here

是否有任何方法可以使用 C# VSTO 代码实现?

我读了很多关于 toggleribbon() 函数的内容,但找不到如何使用它的方法。

编辑: 实际上有一种方法可以查找功能区是否已最小化。 我使用了

    Office.CommandBars cbs = null;
    cbs = Application.CommandBars;
    foreach (Office.CommandBar cb in cbs)
    {
       if (cb.Name == "Ribbon")
       {

         if (cb.Height > 90)
         {
            this.Application.ActiveWindow.Activate(); 
            //to get focus on current workbook so that sendkeys will work
            Application.SendKeys("^{F1}", true);
          }

        }
    }

2
很好的问题,如果有帮助的话,在MS Access中的等效方法是DoCmd.ShowToolbar "Ribbon", acToolbarNo - JMK
1个回答

1

SendKeys CTRL+F1 可以使用,但似乎执行时存在时间问题。真正的问题是您不知道何时在 Excel 中加载功能区以触发行为。

这段代码对我来说似乎可靠,但它确实取决于插件加载的速度有多快。如果需要,您还可以利用 Thread.Sleep()

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
 {
   Task.Factory.StartNew(() => {
       //Thread.Sleep(1000); // optional
       Application.SendKeys("^{F1}");
   }, TaskCreationOptions.AttachedToParent);
 }

关于Ribbon加载时间的相关MSDN论坛帖子,请参见


1
您可以使用高度属性来判断功能区是否被最小化。遍历命令栏并检查 name=="Ribbon"。我已经添加了一段代码来检查功能区是最小化还是最大化。 - Sangram Nandkhile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接