VSTO 系列(06)-自定义任务窗格

任务窗格 (task pane) 是 VSTO 提供的主要界面之一,运行时任务窗格的界面看起来如下。本文假设我们要实现一个方便自己进行拷贝和粘贴的多重剪贴板,实现将单元格中需要反复使用的文本加载到 ListBox,并且能够拷贝到选中的单元格中。

界面设计

任务窗格本质上是一个 User Control,在工程中新建一个 user control:


将 User Control 命名为 ClipBoardPro,设计界面如下:

在 ClipboardPro 类代码中,编写四个按钮单击事件的代码:

using Microsoft.Office.Interop.Excel;
using System;
using System.Windows.Forms;
using WinForm = System.Windows.Forms;

namespace VSTODemo
{
    public partial class ClipBoardPro : UserControl
    {
        public ClipBoardPro()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            string content = ThisAddIn.ExcelApp.ActiveCell.Value;

            if (lstContent.FindStringExact(content) == WinForm.ListBox.NoMatches) {
                lstContent.Items.Add(content);
            }
        }

        private void btnCopy_Click(object sender, EventArgs e)
        {
            if (lstContent.SelectedIndex != -1) {
                foreach(Range cell in ThisAddIn.ExcelApp.Selection) {
                    cell.Value = lstContent.Text;
                }                
            }
        }

        private void btnClearAll_Click(object sender, EventArgs e) {
            lstContent.Items.Clear();
        }

        private void btnClearCurrent_Click(object sender, EventArgs e) {
            lstContent.Items.RemoveAt(lstContent.SelectedIndex);
        }
    }
}

加载任务窗格

为了实现任务窗格的复用,创建一个静态类:

namespace VSTODemo
{
    public static class TaskPaneShared
    {
        public static Microsoft.Office.Tools.CustomTaskPane taskPane;
    }
}

在 ThisAddIn 的 ThisAddIn_Startup 事件中加载:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    ExcelApp = Globals.ThisAddIn.Application;

    // 初始化TaskPane
    ClipBoardPro clipboard = new ClipBoardPro();
    TaskPaneShared.taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(clipboard, "剪贴板");
    TaskPaneShared.taskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight;
    TaskPaneShared.taskPane.DockPositionRestrict = MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
    TaskPaneShared.taskPane.Width = 500;

    // VisibleChange Event
    TaskPaneShared.taskPane.VisibleChanged += new System.EventHandler(taskpane_VisibleChanged);
}

默认情况下,Task Pane 位于界面的右侧停靠,允许通过 DockPosition 属性设置停靠在左右、上下或者浮动。DockPostionRestrict 属性设置是否允许用户改变停靠的位置。

显示和隐藏任务窗格

在 Ribbon1 中新建一个 checkbox,界面如下:

编写 cbShowTaskPanel_Click 事件:

private void cbShowTaskPanel_Click(object sender, RibbonControlEventArgs e)
{
    TaskPaneShared.taskPane.Visible = cbShowTaskPanel.Checked;
}

因为用户也可以手工关闭任务窗格(其实是隐藏),为了保持界面同步,在 TaskPane 的 visibleChange 事件中编写如下代码:

源代码

06-Custom Task Pane - 码云

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VSTO(Visual Studio Tools for Office)是一种用于开发Office应用程序的工具集,其中包括了Excel任务窗格Task Pane)的开发。 Excel任务窗格是一个可嵌入在Excel界面中的小工具窗口,它能够为用户提供附加的功能和信息。通过VSTO,我们可以在Excel中创建自定义任务窗格,以实现各种功能的扩展。 使用VSTO开发Excel任务窗格,首先需要在Visual Studio中创建一个VSTO项目。在项目中,可以通过向项目添加Windows窗口控件来创建任务窗格的布局。我们可以在任务窗格中添加各种控件,例如按钮、文本框、表格等,以提供交互式的功能。 开发Excel任务窗格的关键在于与Excel对象模型的交互。通过VSTO,我们可以直接访问和操作Excel的工作簿、工作表、单元格等对象,以实现任务窗格与Excel数据之间的交互。例如,我们可以编写代码来读取和写入Excel中的数据,或者执行一些数据处理和计算操作。 除了与Excel对象模型的交互,任务窗格还可以与其他外部数据源进行集成。我们可以通过VSTO提供的数据绑定机制,将任务窗格与数据库、Web服务等进行连接,实现数据的获取和更新。 开发完成后,任务窗格可以通过VSTO部署工具进行部署,使其能够在用户的Excel中使用。用户在打开Excel时,任务窗格会自动加载,并成为Excel的一部分。 总而言之,VSTO Excel任务窗格是一种能够增强Excel功能的工具,可以通过VSTO进行开发和部署。它通过提供定制化的功能和与Excel对象模型的交互,为用户带来更加灵活和高效的Excel体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值