Excel自定义任务窗格不显示

我在一个excel VSTO插件中显示一个自定义的任务窗格,我正在构build它,并显示为:

var ctrl = new CellTaskPane(); var pane = CustomTaskPanes.Add(ctrl, "Custom Sheet"); pane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight; pane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange; pane.Visible = true; 

这是在ThisAddin.cs文件中完成的,它在我的机器上工作得很好,都在debugging会话和通过点击一次安装程序安装的插件中​​。

但是,将加载项安装到同事的机器上certificate是麻烦的。

加载项正在运行,上下文菜单/function区正常工作,但窗格只是拒绝显示。

在function区上有一个切换button,可以切换窗格上的Visible属性,甚至可以单击该button不会强制窗格显示。

任何帮助,将不胜感激,谷歌certificate这一点是无用的。

谢谢。


我应该提到, CellTaskPane只是一个UserControl按照MSDN上的文档: http : //msdn.microsoft.com/en-us/library/aa942846.aspx

我build议你先尝试一个非常非常简单的自定义任务窗格,看看是否有效。 我把我能想到的最简单的例子放在一起,基本上是一个文本框,它获取一个值,并在按下button时将其返回到function区。

如果你想尝试这个,那么我会作为一个新的解决scheme。 使用“Designer模式”function区创build新的VSTO项目。 在下面添加一个切换button和一个正常的button。 然后复制这个代码:

ThisAddIn.cs

 using System; using Office = Microsoft.Office.Core; namespace ExcelAddIn1 { public partial class ThisAddIn { private Microsoft.Office.Tools.CustomTaskPane pane; private CellTaskPane ctrl = new CellTaskPane(); private void ThisAddIn_Startup(object sender, System.EventArgs e) { pane = CustomTaskPanes.Add(ctrl, "Custom Sheet"); pane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight; pane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange; pane.Visible = true; pane.VisibleChanged += new EventHandler(taskPaneValue_VisibleChanged); ctrl.SetName("test"); } private void taskPaneValue_VisibleChanged(object sender, System.EventArgs e) { Globals.Ribbons.Ribbon1.toggleButton1.Checked = pane.Visible; } public Microsoft.Office.Tools.CustomTaskPane TaskPane { get { return pane; } } public CellTaskPane MyContainer { get { return ctrl; } } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { } #region VSTO generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InternalStartup() { this.Startup += new System.EventHandler(ThisAddIn_Startup); this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); } #endregion } } 

添加一个名为CellTask​​Pane.cs的新类:

 using System; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; namespace ExcelAddIn1 { public class CellTaskPane : System.Windows.Forms.UserControl { public System.Windows.Forms.TextBox test; public CellTaskPane() { InitializeComponent(); } public void InitializeComponent() { test = new System.Windows.Forms.TextBox(); test.Location = new System.Drawing.Point(120, 8); test.Size = new System.Drawing.Size(232, 20); test.TabIndex = 0; Controls.AddRange(new System.Windows.Forms.Control[] { test }); Size = new System.Drawing.Size(375, 150); } public void SetName(string text) { test.Text = text; } public string GetName() { return test.Text; } } } 

将以下代码添加到Ribbon1.cs中:

 using System; using Microsoft.Office.Tools.Ribbon; namespace ExcelAddIn1 { public partial class Ribbon1 { private void toggleButton1_Click(object sender, RibbonControlEventArgs e) { Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked; } private void button1_Click(object sender, RibbonControlEventArgs e) { button1.Label = Globals.ThisAddIn.MyContainer.GetName(); } } } 

显然你需要做一些调整才能使这个工作,我试图采取一个新的项目和button的默认名称。

当你运行这个你应该得到一个自定义的任务窗格。 当你切换到“TabAddIn”并点击切换button时,它应该显示/隐藏任务窗格。 当您单击普通button时,应将任务窗格中唯一字段的内容复制为button名称。 我默认这是“testing”,所以即使任务窗格不可见,你可以看看它是否在内存中?

我testing了这个,它似乎工作正常。 基本上这只是MSDN上的示例的黑客版本。 如果你想要,你自己也可以自己做这个? 如果没有其他内容,这将使您能够看到,在您正在处理的更复杂的function区中是否有任何问题会导致问题…或者,如果这是您同事机器的根本问题。

原来这不是我们直接做的事!

还有另一个加载项(第三方),由于一些奇怪的原因干扰了窗格显示(不知道为什么或如何)。

耻辱,Excel不显示任何forms的错误,或至less抛出一个exception。

呃,好吧。

我有同样的问题,但它不是我可以禁用(COM +或Excel)的任何插件。

我有我的Excelconfiguration为在启动时打开文件(Excel选项 – >高级 – >常规)

在这里输入图像描述

在那里,我有一个定制function区的.XLAM。 当我清除这个configuration,我的插件开始工作。

我遇到了这个问题,而试图获得“演练:同步自定义任务窗格与function区button”微软示例代码工作。 以下是该页面的链接:

http://msdn.microsoft.com/en-us/library/bb608590.aspx

从头开始三次,在互联网上search我可能做错了什么的线索,我遇到了这个问题,克林特的回答是,一个加载项是造成他的问题。 我启用了一些插件,但是有一些试验和错误,我发现了罪魁祸首:微软自己的“分析工具包”!

一旦我禁用分析工具包,自定义窗格开始出现,并按预期消失。

所以,正如克林特所发现的那样,如果遇到这个问题,你应该尝试的第一件事就是禁用所有加载项,看看是否有这个技巧。 如果是这样,那么你可以回去开始打开它们,直到find干扰自定义窗格可见性的那个。

那么,按照@ GaryP的build议,禁用我的其他加载项,并认为我已经解决了这个问题(虽然没有访问我的其他插件),但是我发现,每当我打开多个插件时,加载项就会消失一个工作簿。

但在那个时候,我不是只是得到一个失踪的任务面板或一个沉默的失败,我实际上有一个错误:

任务面板已被删除或不再有效

所以看起来禁用加载项本身并不能解决问题,而是禁用加载项会减less打开工作簿的数量(即使加载项不可见,仍然可以有Ribbon句柄)。 ..

根本原因是2013年及以后使用SDI 。

所以,现在我可以加载所有我的加载项。

我遇到了同样的问题,并没有通过禁用分析工具包来修复它,但是,我不得不将XLAM从已安装的文件夹中移出(因为无法通过Excel将其删除,因此请将其分解)开始工作。

我有意义加回文件,它继续工作。 激活插件会导致我的自定义任务栏中断。 不知道这个长期的解决scheme是在这里。