VSTO学习(四)——自定义Excel UI 转载
本专题概要
引言
在上一个专题中为大家介绍如何创建Excel的解决方案,相信大家通过从上面一个专题之后了解了Excel的对象模型,以及Office两种解决方案的,看完上一个专题之后,肯定很多朋友想为Excel自定义属于自己的UI界面,例如,有这样的一些疑问——是否可以使用VSTO来自定义选项卡呢? 是否可以自定义上下文菜单的呢?如果你也有这些疑问的话,相信通过本专题你将会得到答案的,下面就开始我们本专题的介绍。
二、自定义任务窗体
在使用Word2010的时候我们可以通过左边的导航来看了解文档的结构,同时我们也可以在输入框的地方输入文字来进行搜索,然而这个左边的导航就是一个任务窗体,相信通过下面的图大家可以理解Word中那部分是一个任务窗体:
但是我们在使用Excel中却没有找到类似的任务窗体,这时候大家肯定会有这样一个疑问——如果我想在Excel也想实现一个自定义任务窗体该怎么办呢?用VSTO可以帮我们办到吗?答案是肯定的。首先先模拟一个需求的,相信大家都知道使用F1是打开一个帮助文档,但是弹出的帮助文档是与Excel在不同界面的,所以很多朋友在查阅帮助的文档的时候都需要缩小Excel文档来查阅,这样就显得有些不方便了,我在使用的时候就想,能不能把帮助文档继承在Excel的右边呢?这样我们查阅Excel帮助文档就方便多了,就不要缩小Excel文档,或在Excel和帮助文档之间左右切换了。既然有这种需求,我们就有实现它的必要性,下面就具体说说如何实现的:
首先在看具体代码之前,我向大家分析下实现一个任务窗体的思路:
- 引言
- 自定义任务窗体(Task Pane)
- 自定义选项卡,即Ribbon
- 自定义上下文菜单
- 小结
引言
在上一个专题中为大家介绍如何创建Excel的解决方案,相信大家通过从上面一个专题之后了解了Excel的对象模型,以及Office两种解决方案的,看完上一个专题之后,肯定很多朋友想为Excel自定义属于自己的UI界面,例如,有这样的一些疑问——是否可以使用VSTO来自定义选项卡呢? 是否可以自定义上下文菜单的呢?如果你也有这些疑问的话,相信通过本专题你将会得到答案的,下面就开始我们本专题的介绍。
二、自定义任务窗体
在使用Word2010的时候我们可以通过左边的导航来看了解文档的结构,同时我们也可以在输入框的地方输入文字来进行搜索,然而这个左边的导航就是一个任务窗体,相信通过下面的图大家可以理解Word中那部分是一个任务窗体:
但是我们在使用Excel中却没有找到类似的任务窗体,这时候大家肯定会有这样一个疑问——如果我想在Excel也想实现一个自定义任务窗体该怎么办呢?用VSTO可以帮我们办到吗?答案是肯定的。首先先模拟一个需求的,相信大家都知道使用F1是打开一个帮助文档,但是弹出的帮助文档是与Excel在不同界面的,所以很多朋友在查阅帮助的文档的时候都需要缩小Excel文档来查阅,这样就显得有些不方便了,我在使用的时候就想,能不能把帮助文档继承在Excel的右边呢?这样我们查阅Excel帮助文档就方便多了,就不要缩小Excel文档,或在Excel和帮助文档之间左右切换了。既然有这种需求,我们就有实现它的必要性,下面就具体说说如何实现的:
首先在看具体代码之前,我向大家分析下实现一个任务窗体的思路:
- 首先,任务窗体是一个窗体,当然就需要在创建的Excel解决方案中创建一个窗体的了,这里我们创建了一个用户控件。
- 创建和设计完用户控件的界面之后,我们就需要把这个用户控件添加到Excel中去了,然而我们在以前的接触的开发中,添加控件都是把控件添加到某个几个中去的,例如WinForm中要向窗体添加一个button按钮,就需要把这个button添加进Controls集合中,同样VSTO也提供这样一个把任务面板添加进去的集合—— Microsoft.Office.Tools.CustomTaskPaneCollection,我们可以通过 Globals.ThisAddIn.CustomTaskPanes这行代码来获得这个集合,然后调用Add方法就可以把我们自定义的任务面板添加进Excel中了。
- 添加进去之后,我们还需要使任务面板显示出来,这样就涉及了Visible属性了,确实 Microsoft.Office.Tools.CustomTaskPane 也有Visible属性
复制内容到剪贴板
代码:
public partial class ThisAddIn
{
// 定义一个任务窗体
internal Microsoft.Office.Tools.CustomTaskPane helpTaskPane;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// 把自定义窗体添加到CustomTaskPanes集合中
// ExcelHelp 是一个自定义控件类
helpTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new ExcelHelp(""), "Excel Help");
// 使任务窗体可见
helpTaskPane.Visible = true;
// 通过DockPosition属性来控制任务窗体的停靠位置,
// 设置为 MsoCTPDockPosition.msoCTPDockPositionRight这个代表停靠到右边,这个值也是默认值
//helpTaskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight;
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
}