Excel 2007以编程方式最小化function区,但不是菜单栏

在Excel 2007中,我们可以右键单击function区并select“最小化function区”并将其最小化。

我努力了

Application.ExecuteExcel4Macro("show.toolbar(\"ribbon\",false)"); 

这隐藏了整个丝带,但我不想隐藏整个丝带。

我甚至尝试过

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

但它不可靠,因为有时它不能正常工作。

在这里输入图像说明

有没有办法使用C#VSTO代码?

我读了很多关于toggleribbon()函数,但无法find使用它的方法。

编辑:有方法,你可以实际上发现,如果function区已经最小化。 我用了

  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); } } } 

SendKeys CTRL + F1的作品,但它似乎是一个执行的时机问题。 真正的问题是,你不知道何时在Excel中实际加载function区来触发行为。

这段代码似乎对我来说可靠地工作,但是这确实取决于你的加载项加载的速度。 如果需要,您也可以使用Thread.Sleep()

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

有关function区加载时间,请参阅相关MSDN论坛post 。