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 。