7

我已经成功实现了此处的 Microsoft 示例“演练:使用功能区按钮同步自定义任务窗格”:http: //msdn.microsoft.com/en-us/library/bb608590.aspx

最初我遇到了任务窗格未显示的问题,结果证明这是我的加载项与 Microsoft 的“分析工具包”之间存在一些冲突的结果。一旦我禁用了分析工具包,自定义任务窗格就会开始按预期显示和隐藏。

然后,我编写了一些代码来在用户按下按钮时更改选定范围内的单元格。这似乎工作得很好——直到我打开另一个工作簿!每个工作簿窗口都有自己的加载项功能区,但是当我单击切换按钮打开/关闭自定义任务窗格时,它只会打开/关闭创建的第一个窗口的自定义任务窗格。这与我在哪个窗口中单击切换按钮无关。

该代码在 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 + "*";
                }
            }
        }
    }
}

其余代码与示例中的一样。

有没有办法更改示例,使其适用于打开的多个工作簿?我想要的是相同的加载项出现在每个工作簿窗口中,具有相同的功能区和相同的自定义窗格。当然,让任何功能区操作(例如按下按钮)路由到出现在同一窗口中的自定义任务窗格。

4

1 回答 1

0

是的,MSDN 上还有另一个示例,它讨论了在多个文档中管理自定义任务窗格。请注意,这是从 Word/InfoPath 的角度来看的,但 Excel 的基本思想也是相同的。

一般来说,如果当前工作簿没有,您需要为当前工作簿添加一个新的任务窗格。因此,将自定义任务窗格逻辑的添加从 Addin 启动移动到功能区按钮单击事件。在按钮单击事件中执行此操作使您有机会在单击功能区时向当前文档添加新的任务窗格。

链接:https ://msdn.microsoft.com/en-us/library/bb264456(v=office.12).aspx?f=255&MSPPError=-2147217396#Anchor_2

将有用的代码片段放在下面,以防链接将来失效:

//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 来隐藏任务窗格,而不是删除。希望这可以帮助。

于 2015-12-10T12:24:28.520 回答