收藏 分销(赏)

创建Excel解决方案样本.doc

上传人:天**** 文档编号:3735570 上传时间:2024-07-16 格式:DOC 页数:29 大小:1.48MB
下载 相关 举报
创建Excel解决方案样本.doc_第1页
第1页 / 共29页
创建Excel解决方案样本.doc_第2页
第2页 / 共29页
创建Excel解决方案样本.doc_第3页
第3页 / 共29页
创建Excel解决方案样本.doc_第4页
第4页 / 共29页
创建Excel解决方案样本.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。VSTO之旅系列(二): 创立Excel解决方案 -02-24 18:00:150本专题概要 引言 创立VSTO项目 Excel对象模型 创立Excel外接程序 创立Excel文档级自定义项 小结一、 引言可能很多朋友都没有听说过VSTO这个东西的, 本人之前也同样也不知道的, 可是由于工作的原因接触了这方面, 由于VSTO方面国内的资料比较少, 本人刚开始学习的时候都是参考MSDN的, 可是上面很多资料都是英文的, 可能学习起来会比较慢点, 因此本人把最近一段时间学习的内容记录下来, 一来是作为一个巩固的学习笔记, 二来希望这些博客能

2、够帮助一些刚接触VSTO的朋友能够有所借鉴。讲了这么多废话(指的上面一些过渡的话), 到底VSTO到底是什么呢?这里我简单的概括下的VSTO是微软推出一种对Office产品进行操作的技术, 其中提供了一些类库来让开发人员能够更方便地开发出Office的解决方案,即对Word/Excel/Outlook实现一些扩展功能。对于VSTO的更多介绍大家能够参看该系列的第一篇博文。在这个专题将为大家介绍下, 如何创立Excel的解决方案?二、 创立VSTO项目对于刚接触VSTO的朋友来说, 可能根本就不知道如何去创立一个VSTO的项目的, 相信经过这个部分大家就会觉得是如此的简单。环境的搭建进行VSTO

3、开发的环境搭建是相当简单的, 只需要安装Visual Studio (当然安装VS 的时候在安装组件中必须勾选VSTO选择, 这个选项是默认勾上的。大家能够在安装VS的时候留意下)和Office 就能够, 当然VS 和Office 的安装也能够完成环境的搭建。创立第一个Excel工程来开始我们的VSTO之旅第一步, 选择新建项目-Visual C#-Office- , 然后选择Excel 外接程序(如何是英文版即Excel Add-in), 如下图: 从图中能够看到, 除了外接程序外, 还有Excel模板和Excel文档这两种项目类型, 她们的区别是 外接程序是应用程序级别的, 即如果你创立了

4、Excel 外接程序, 该程序对所有Excel应用都是有效的, 因为每次Excel的启动过程都会加载该插件(即该程序), 大家肯定留意到当我们启动Excel或Word的时候都会加载一些加载项, 其实这些加载项就是属于外接程序, 即插件, 启动过程见下面图: 而 文档和模板项目, 都是属于文档级别的程序, 该程序只对当前文档和模板有效, 创立这两种类型的项目, 会在项目的工程目录下会生成一个word文件(文档项目会生成一个 Document1.docx文件, 模板项目会生成一个Document1.dotx文件)。创立成功之后, 外接程序的项目文件结构见下图: 从图中能够看出, 刚创立的VSTO外

5、接程序都只有一个ThisAddIn.cs文件, 该文件即是一个宿主项(更多关于宿主项和宿主控件的内容能够查看该系列的第一篇博文), 我们能够经过这个文件来对Excel对象进行访问。同时该类中有ThisAddIn_Startup和ThisAddIn_Shutdown两个方法, 从两个方法中命名中能够知道, 如果你的代码想在加载外接程序时运行的话, 就放把代码放在ThisAddIn_Startup方法内容, 如果你想在外接程序卸载的时候运行你的代码, 就把这些代码放在ThisAddIn_Shutdown方法内。三、 Excel对象模型要开发Excel的项目, 就自然少不了对Excel对象模型的了解

6、了, 只有了解Excel对象模型, 这样才能更好地对Excel进行处理。下面先给出一张Excel对象模型的图: 下面就具体对上图中的各个对象做一个简单的介绍: Application对象Excel中的Application对象表示Excel应用程序, 该对象是所有Excel对象的根, 你能够经过Application对象, 获取到其它对象, 在外接程序中, 我们能够经过下面的方式来获得Application对象: Globals.ThisAddIn.ApplicationWorkbooks对象代表Workbook对象的集合, 而Workbook对象表示Excel中的单个工作簿, 我们能够经过下

7、面的方式来获得工作簿对象: Globals.ThisAddIn.Application.ThisWorkbookWorksheets对象代表Worksheet对象的集合, 而Worksheet代表的就是Excel中的表, 下面的代码能够获得Worksheet对象: Globals.ThisAddIn.Application.ThisWorkbook.ActiveSheet (激活的表, 每次打开一个Excel文件, 都是表一即sheet1被激活, 因此经过该代码就说获得表一对象)Range对象代表一个范围, 是操作Excel文档最常见的对象, 它能够表示为一个单元格、 一行、 一列或多个单元格

8、块( 能够连续, 也能够不连续) 的单元格选定范围, 甚至多个工作表中的一组单元格。可能上面的解释过于枯燥, 相信大家经过下图能够更好地理解Excel中的各个对象: 四、 创立Excel外接程序介绍完了Excel对象模型之后, 我们就能够利用这些对象来对Excel文档进行操作了, 下面就创立一个简单的Excel外接程序的。首先我们模拟一个需求, 大多说软件在使用时都会弹出一个欢迎界面, 这样我们就创立一个外接程序, 每次打开Excel文件时弹出一个欢迎界面,退出时弹出”谢谢使用”界面。我们只需要在上面的创立工程中介入下面的代码即可: using System.Windows.Forms;nam

9、espace MyExcelAddIn1 public partial class ThisAddIn private void ThisAddIn_Startup(object sender, System.EventArgs e) / 因为欢迎使用窗口要在打开Excel的时候弹出, 因此把下面代码放在Startup方法内 MessageBox.Show(欢迎使用Microsoft Excel); private void ThisAddIn_Shutdown(object sender, System.EventArgs e) / 在退出Excel的时候弹出谢谢使用窗口, 因此把下面的代码

10、放在Shutdown方法内 MessageBox.Show(谢谢使用! ); #region VSTO generated code / / Required method for Designer support - do not modify / the contents of this method with the code editor. / private void InternalStartup() this.Startup += new System.EventHandler(ThisAddIn_Startup); this.Shutdown += new System.Eve

11、ntHandler(ThisAddIn_Shutdown); #endregion 这样, 我们就完成了上面简单的一个模拟需求了, 下面让我们按F5来测试下效果吧! 按F5运行该程序时, 首先打开一个Excel之后, 一个欢迎界面就会弹出: 点击Excel窗口上的X按钮时, 就会弹出一个 ”谢谢使用! ”的窗口, 效果如下: 点击 Ok 按钮之后才会正常退出Excel。这样就完成了一个简单的Excel外接程序了, 上面提到过外接程序是应用程序级别的, 因此当你每次打开Excel的时候都会有这样的一个欢迎界面和关闭Excel时都有一个谢谢使用窗口,有些朋友想问了, 如果我想卸载这个插件怎么办呢?

12、 方法很简单, 只需要右键你的解决方案清理, 这样能够了, 另外你也能够从开发工具选项卡COM 插件, 在弹出的窗口中选择你自定义的插件 再按下移除按钮。具体步骤见下图: 五、 创立Excel文档级自定义项介绍完了创立Excel外接程序之后, 下面看看如何创立一个文档级的项目: 1. 新建一个Excel Workbook(即Excel工作簿)项目: 2. 单击 OK按钮, 在下面的窗口中单击 ”OK”按钮: 3. 在第一创立Excel工作簿项目是会弹出下面的一个窗口( 窗口意思为: 是否允许创立的项目访问VBA项目系统) , 此时我们只需要点击”Ok”就完成了Excel工作簿项目的创立。现在我

13、们来模拟一个需求, 比如现在有一个成绩单工作表, 我们希望获得各科目不及格同学的名字。此时我们只需要在上面创立的工作簿项目中添加一个ComboBox, 一个Button, 一个textbox。在button的Click事件中添加下面的代码: / 找出各科目不及格同学的名字 private void btnSearch_Click(object sender, EventArgs e) / 清除textbox中的内容 txtResult.Clear(); / 从复选框中获得选择的科目索引 int subjectIndex = cbxsubjects.SelectedIndex; if (subj

14、ectIndex = -1) MessageBox.Show(请先选择一个科目); return; / 获得选择的科目名称 string subjectName = cbxsubjects.SelectedItem.ToString(); / 获得工作表对象 Excel.Worksheet worksheet =(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet; for (int row = 2; row worksheet.UsedRange.Rows.Count+1; row+) Excel.Range rng =(Excel.Range)

15、worksheet.Cellsrow,subjectIndex + 2; Excel.Range rng1 = (Excel.Range)worksheet.Cellsrow, 1; if (rng.Value新建项, 在弹出的添加新项窗口中选择 功能区(可视化设计器)2. 输入名称之后单击添加按钮3. 设计选项卡UI界面, 本例子中添加了一个toggleButton.经过上面的步骤就能够创立一个自定义选项卡, 这种方式创立的选项卡在Excel项目(针正确是外接Excel项目类型)启动的时候就会被加载。下面具体介绍了如何设计选项卡(即Ribbon): 1. 设计RibbonTab, 首先把Co

16、ntrolIdType属性设置为Custom, 不然我们设计的RibbonGroup部分将会在加载项选项卡下, 然后设置Name为HelpTab,这样我们创立的选项卡才会成为一个新的选项卡, 如果我们想把ToggleButton放在Home选项卡下显示, 此时我们只需要把ControlIdType设置为Office, 然后把OfficeId设置为TabHome, 具体情况大家能够测试看看的, 关于Office 中内置的Control ID 列表, 大家能够从下面这个链接下载: Office System Document: Lists of Control IDs2. 从工具箱中拖出一个Tog

17、gleButton, 把Label属性设置为Help, 并把ControlSize属性设置为RibbonControlSizeLarge: 3. 双击 Help ToggleButton按钮, 实现它的单击事件: / 帮助选项卡中toggleButton的单击事件 private void toggleHelpBtn_Click(object sender, RibbonControlEventArgs e) / 经过toggleHelpButton的选中状态来控制帮助任务栏的显示和隐藏 Globals.ThisAddIn.helpTaskPane.Visible = toggleHelpBt

18、n.Checked; 经过上面的三步也就完成了一个Ribbon的创立了, 当我们创立好一个Ribbon之后, 我们能够经过我们自定义的Ribbon下的按钮来显示/隐藏我们的任务窗体, 可是到这里, Ribbon的开发并没有结束, 此时还有一个问题就是当我们点击 ”Excel help”右上角的X按钮关闭时, 我们Ribbon下的按钮状态也要跟着更变(大家能够测试, 当我们关闭Word中的导航任务窗体时, 试图下的导航窗格复选框”也会跟着改变), 此时我们就需要实现: 点击关闭按钮与Help按钮状态同步的功能的, 此时我们只需要对TaskPane的VisibleChanged事件进行处理就能够(

19、 因为关闭任务窗体就会触发该事件, 因此只需要把同步状态的代码放在该事件就能够了),具体代码如下: / 定义一个任务窗体 internal Microsoft.Office.Tools.CustomTaskPane helpTaskPane; private void ThisAddIn_Startup(object sender, System.EventArgs e) / 把自定义窗体添加到CustomTaskPanes集合中 / ExcelHelp 是一个自定义控件类 helpTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new Exc

20、elHelp(), Excel Help); / 使任务窗体可见 /helpTaskPane.Visible = true; / 经过DockPosition属性来控制任务窗体的停靠位置, / 设置为 MsoCTPDockPosition.msoCTPDockPositionRight这个代表停靠到右边, 这个值也是默认值 /helpTaskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight; / 当用户点击 ”Excel help”右上角的X按钮关闭时, 我们需要同步选项卡上button的状态 helpTaskPane

21、.VisibleChanged += new EventHandler(helpTaskPane_VisibleChanged); / 添加上下文菜单 /AddToCellMenu(); private void ThisAddIn_Shutdown(object sender, System.EventArgs e) / 用户点击 Excel Help 侧边栏右上角的X按钮关闭它时 / 我们需要正确同步 ”帮助”按钮的状态 / 我们能够经过处理 ”Excel Help”侧边栏的VisualChanged 事件完成 private void helpTaskPane_VisibleChange

22、d(object sender, EventArgs e) / 获得Help Ribbon 对象 Help helpRibbon = Globals.Ribbons.GetRibbon(); / 同步Help Ribbon下的帮助按钮的状态 helpRibbon.toggleHelpBtn.Checked = Globals.ThisAddIn.helpTaskPane.Visible; 运行效果图为: 四、 自定义上下文菜单看完上面两部分的实现之后, 我在学习的过程中又想能不能经过右键菜单来显示/隐藏任务窗体呢? 对于这点VSTO也是能够做到的, 我们只需要添加CommandBarButto

23、n对象( 当我们右键一个单元格(即为Cell)的时候,我们能够看到一上下文菜单, 菜单内所有控件(不论是按钮还是排序这样的菜单控件) , 然后设置该对象的属性和添加一个Click事件, 主要代码如下: / 添加一个自定义按钮到单元格上下文菜单中 contextMenu =Application.CommandBarsCell; CommandBarButton commandBarbtn = (CommandBarButton)contextMenu.Controls.Add(MsoControlType.msoControlButton, Before: 1); commandBarbtn.

24、Tag = Help_Tag; commandBarbtn.Caption = 查看帮助; commandBarbtn.FaceId = 49; commandBarbtn.Click+=new _CommandBarButtonEvents_ClickEventHandler(commandBarbtn_Click); 运行效果为(这样我们右键Cell的时候就会多出一个我们自己定义的 ”查看帮助”按钮): 五、 小结到这里本专题的内容就介绍完了, 本专题主要介绍如何为Excel创立一个自定义的任务窗体、 Ribbon和上下文菜单, 对于Word和Outlook这部分的内容我就不重复介绍, 创立方式和Excel的创立方式很类似。在下一个专题中我将给大家介绍下如何创立Word解决方案。本专题所有源码:

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服