我已经成功实现了Microsoft示例“演练:使用功能区按钮同步自定义任务窗格”,如下所示: http://msdn.microsoft.com/en-us/library/bb608590.aspx
最初我遇到了一个问题,任务窗格没有显示,结果是我的加载项和Microsoft的“Analysis Toolpack”之间发生了一些冲突。禁用Analysis Toolpack后,自定义任务窗格开始按预期显示和隐藏。
然后,当用户按下按钮时,我编写了一些代码来更改所选范围内的单元格。这似乎工作得很好 - 直到我打开另一本工作簿!每个工作簿窗口都有自己的加载项功能区,但是当我单击切换按钮打开/关闭自定义任务窗格时,它只会打开/关闭创建的第一个窗口的自定义任务窗格。这与我单击切换按钮的窗口无关。
代码在ThisAddIn_Startup中实例化CustomTaskPane对象(就像在示例代码中一样)。我唯一添加的是UserControl中的按钮操作:
using xl = Microsoft.Office.Interop.Excel;
namespace SynchronizeTaskPaneAndRibbon
{
public partial class TaskPaneControl : UserControl
{
public TaskPaneControl()
{
InitializeComponent();
}
private void actionButton1_Click(object sender, EventArgs e)
{
xl.Range selection_rng = Globals.ThisAddIn.Application.Selection;
foreach (xl.Range cell in selection_rng.Cells)
{
if (cell.Value is string)
{
string v = cell.Value;
cell.Value = v + "*";
}
}
}
}
}
其余代码就像示例中一样。
有没有办法更改示例,以便它可以用于打开多个工作簿?我想要的是相同的加载项出现在每个工作簿窗口中,具有相同的功能区和相同的自定义窗格。当然,要将任何功能区操作(例如按下按钮)路由到显示在同一窗口中的自定义任务窗格。
答案 0 :(得分:0)
是的,MSDN上还有另一个例子,它讨论了在多个文档中管理自定义任务窗格。请注意,这是从Word / InfoPath的角度来看,但Excel的基本思想也是一样的。
一般来说,如果当前工作簿没有,则需要为当前工作簿添加新的任务窗格。因此,将添加自定义任务窗口逻辑从Addin启动添加到功能区按钮单击事件。通过按钮单击事件执行此操作,您可以在单击功能区时向当前文档添加新任务窗格。
将有用的代码段放在下面,以防链接在将来失效:
//Add a custom taskpane to active Word document
public void AddCalendarTaskPane(Word.Document doc)
{
ctpCalendar = this.CustomTaskPanes.Add(new CalendarControl(),
"Select a date", doc.ActiveWindow);
ctpCalendar.Visible = true;
}
我建议通过将Visible标志切换为false而不是YMMV来隐藏任务窗格,而不是删除。希望这会有所帮助。