在之前的文章里介绍了怎么添加一个自定义CommandBar,接下来介绍如何加入一个自定义Pane,并在Pane上加入并利用 .net winform 控件。本次要实现一个Excel插入图片的预览补助功能,先上张图。
在 VSTO 里实现这个功能其实蛮简单,首先添加一个 UserControl :
然后在 ThisAddIn_Startup 里,将 PicturePaneView 实例化并加入 CustomTaskPanes 中即可。
Private Sub ThisAddIn_Startup() Handles Me.Startup Dim view = New PicturePaneView CustomPane = Me.CustomTaskPanes.Add(view, "PicturePreview") CustomPane.Visible = False End Sub
UserControl 中的所有操作都和 Winform 开发中无异,这里就不赘述了。 在 View 里,可以通过 Globals.ThisAddIn.Application 获得 Excel 实例。
和 Excel 的交互:通过双击 DataGridView 的一条数据(图片名),将图片插入 Excel,代码如下:
Private Sub DataGridView1_CellDoubleClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles DataGridView1.CellDoubleClick Dim sheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet Dim imagePath = DataGridView1.CurrentRow.Cells(1).Value Dim activeCell = Globals.ThisAddIn.Application.ActiveCell sheet.Shapes.AddPicture(imagePath, Microsoft.Office.Core.MsoTriState.msoFalse, _ Microsoft.Office.Core.MsoTriState.msoTrue, _ activeCell.Left, activeCell.Top, _ 100, 100) End Sub
通过 Excel.Application. ActiveSheet/Excel.Application.ActiveCell 取得当前激活的 WorkSheet 和 Cell。并在 ActiveCell 处插入选中的图片。
OK,目前为止一个图片浏览扩展的Excel PaneView 就基本上完成了,但还存在一点小问题:PaneView 现在只是在 AddIn 时加载,如果用户点击关闭了就没有UI能提供加载了。接下来追加一个 Ribbon 控件来控制 PaneView 的显示。
从 Office Ribbin Controls 里拖一个Button控件放到 Ribbon 面板上,然后添加事件。不过直接是访问不到自定义 View 的实例的,需要ThisAddIn公开这个属性。
Public Property CustomPane As Microsoft.Office.Tools.CustomTaskPane然后在 Ribbon 的 Click 事件处理中,调用 CustomPane.Visible = True
Private Sub btnImgBrowser_Click(sender As System.Object, e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles btnImgBrowser.Click Globals.ThisAddIn.CustomPane.Visible = True End Sub另外,通过 Ribbon Button 的 Image 显示图标。运行一下:
最后赞一下 VSTO 这种强大的扩展机制。只要有想法就能轻松在 Office 里实现非常酷的功能。