创建Excel解决方案

上传人:磨石 文档编号:48863575 上传时间:2022-01-15 格式:DOC 页数:20 大小:1.48MB
收藏 版权申诉 举报 下载
创建Excel解决方案_第1页
第1页 / 共20页
创建Excel解决方案_第2页
第2页 / 共20页
创建Excel解决方案_第3页
第3页 / 共20页
资源描述:

《创建Excel解决方案》由会员分享,可在线阅读,更多相关《创建Excel解决方案(20页珍藏版)》请在装配图网上搜索。

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

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

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

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

5、(更多关于宿主项和宿主控件的内容可以查看该系列的第一篇博文),我们可以通过这个文件来对Excel对象进行访问。同时该类中有ThisAddIn_Startup和ThisAddIn_Shutdown两个方法,从两个方法中命名中可以知道,如果你的代码想在加载外接程序时运行的话,就放把代码放在ThisAddIn_Startup方法内容,如果你想在外接程序卸载的时候运行你的代码,就把这些代码放在ThisAddIn_Shutdown方法内。三、Excel对象模型要开发Excel的项目,就自然少不了对Excel对象模型的了解了,只有了解Excel对象模型,这样才能更好地对Excel进行处理。下面先给出一张E

6、xcel对象模型的图:下面就具体对上图中的各个对象做一个简单的介绍:Application对象Excel中的Application对象表示Excel应用程序,该对象是所有Excel对象的根,你可以通过Application对象,获取到其他对象,在外接程序中,我们可以通过下面的方式来获得Application对象:Globals.ThisAddIn.ApplicationWorkbooks对象代表Workbook对象的集合,而Workbook对象表示Excel中的单个工作簿,我们可以通过下面的方式来获得工作簿对象:Globals.ThisAddIn.Application.ThisWorkboo

7、kWorksheets对象代表Worksheet对象的集合,而Worksheet代表的就是Excel中的表,下面的代码可以获得Worksheet对象:Globals.ThisAddIn.Application.ThisWorkbook.ActiveSheet (激活的表,每次打开一个Excel文件,都是表一即sheet1被激活,所以通过该代码就说获得表一对象)Range对象代表一个范围,是操作Excel文档最常用的对象,它可以表示为一个单元格、一行、一列或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至多个工作表中的一组单元格。可能上面的解释过于枯燥,相信大家通过下图可以更好地理解

8、Excel中的各个对象:四、创建Excel外接程序介绍完了Excel对象模型之后,我们就可以利用这些对象来对Excel文档进行操作了,下面就创建一个简单的Excel外接程序的。首先我们模拟一个需求,大多说软件在使用时都会弹出一个欢迎界面,这样我们就创建一个外接程序,每次打开Excel文件时弹出一个欢迎界面,退出时弹出“谢谢使用”界面。我们只需要在上面的创建工程中介入下面的代码即可:using System.Windows.Forms;namespace MyExcelAddIn1 public partial class ThisAddIn private void ThisAddIn_Sta

9、rtup(object sender, System.EventArgs e) / 因为欢迎使用窗口要在打开Excel的时候弹出,所以把下面代码放在Startup方法内 MessageBox.Show(欢迎使用Microsoft Excel); private void ThisAddIn_Shutdown(object sender, System.EventArgs e) / 在退出Excel的时候弹出谢谢使用窗口,所以把下面的代码放在Shutdown方法内 MessageBox.Show(谢谢使用!); #region VSTO generated code / / Required m

10、ethod 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.EventHandler(ThisAddIn_Shutdown); #endregion 这样,我们就完成了上面简单的一个模拟需求了,下面让我们按F5来测试下效果吧!按

11、F5运行该程序时,首先打开一个Excel之后,一个欢迎界面就会弹出:点击Excel窗口上的X按钮时,就会弹出一个 “谢谢使用!”的窗口,效果如下:点击 Ok 按钮之后才会正常退出Excel。这样就完成了一个简单的Excel外接程序了,上面提到过外接程序是应用程序级别的,所以当你每次打开Excel的时候都会有这样的一个欢迎界面和关闭Excel时都有一个谢谢使用窗口,有些朋友想问了,如果我想卸载这个插件怎么办呢?方法很简单,只需要右键你的解决方案清理,这样可以了,另外你也可以从开发工具选项卡COM 插件,在弹出的窗口中选择你自定义的插件 再按下移除按钮。具体步骤见下图:五、创建Excel文档级自定

12、义项介绍完了创建Excel外接程序之后,下面看看如何创建一个文档级的项目:1. 新建一个Excel 2010 Workbook(即Excel工作簿)项目:2. 单击 OK按钮,在下面的窗口中单击 ”OK“按钮:3. 在第一创建Excel工作簿项目是会弹出下面的一个窗口(窗口意思为:是否允许创建的项目访问VBA项目系统),此时我们只需要点击“Ok”就完成了Excel工作簿项目的创建。现在我们来模拟一个需求,比如现在有一个成绩单工作表,我们希望获得各科目不及格同学的名字。此时我们只需要在上面创建的工作簿项目中添加一个ComboBox,一个Button,一个textbox。在button的Click

13、事件中添加下面的代码: / 找出各科目不及格同学的名字 private void btnSearch_Click(object sender, EventArgs e) / 清除textbox中的内容 txtResult.Clear(); / 从复选框中获得选择的科目索引 int subjectIndex = cbxsubjects.SelectedIndex; if (subjectIndex = -1) MessageBox.Show(请先选择一个科目); return; / 获得选择的科目名称 string subjectName = cbxsubjects.SelectedItem.T

14、oString(); / 获得工作表对象 Excel.Worksheet worksheet =(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet; for (int row = 2; row worksheet.UsedRange.Rows.Count+1; row+) Excel.Range rng =(Excel.Range)worksheet.Cellsrow,subjectIndex + 2; Excel.Range rng1 = (Excel.Range)worksheet.Cellsrow, 1; if (rng.Value新建项,

15、在弹出的添加新项窗口中选择 功能区(可视化设计器)2. 输入名称之后单击添加按钮3. 设计选项卡UI界面,本例子中添加了一个toggleButton.通过上面的步骤就可以创建一个自定义选项卡,这种方式创建的选项卡在Excel项目(针对的是外接Excel项目类型)启动的时候就会被加载。下面具体介绍了如何设计选项卡(即Ribbon):1. 设计RibbonTab,首先把ControlIdType属性设置为Custom,不然我们设计的RibbonGroup部分将会在加载项选项卡下,然后设置Name为HelpTab,这样我们创建的选项卡才会成为一个新的选项卡,如果我们想把ToggleButton放在H

16、ome选项卡下显示,此时我们只需要把ControlIdType设置为Office,然后把OfficeId设置为TabHome, 具体情况大家可以测试看看的,关于Office 中内置的Control ID 列表,大家可以从下面这个链接下载:2007 Office System Document: Lists of Control IDs2. 从工具箱中拖出一个ToggleButton,把Label属性设置为Help,并把ControlSize属性设置为RibbonControlSizeLarge:3. 双击 Help ToggleButton按钮,实现它的单击事件: / 帮助选项卡中toggle

17、Button的单击事件 private void toggleHelpBtn_Click(object sender, RibbonControlEventArgs e) / 通过toggleHelpButton的选中状态来控制帮助任务栏的显示和隐藏 Globals.ThisAddIn.helpTaskPane.Visible = toggleHelpBtn.Checked; 通过上面的三步也就完成了一个Ribbon的创建了,当我们创建好一个Ribbon之后,我们可以通过我们自定义的Ribbon下的按钮来显示/隐藏我们的任务窗体,但是到这里,Ribbon的开发并没有结束,此时还有一个问题就是当

18、我们点击 “Excel help”右上角的X按钮关闭时,我们Ribbon下的按钮状态也要跟着更变(大家可以测试,当我们关闭Word中的导航任务窗体时,试图下的导航窗格复选框“也会跟着改变),此时我们就需要实现:点击关闭按钮与Help按钮状态同步的功能的,此时我们只需要对TaskPane的VisibleChanged事件进行处理就可以(因为关闭任务窗体就会触发该事件,所以只需要把同步状态的代码放在该事件就可以了),具体代码如下:/ 定义一个任务窗体 internal Microsoft.Office.Tools.CustomTaskPane helpTaskPane; private void

19、ThisAddIn_Startup(object sender, System.EventArgs e) / 把自定义窗体添加到CustomTaskPanes集合中 / ExcelHelp 是一个自定义控件类 helpTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new ExcelHelp(), Excel Help); / 使任务窗体可见 /helpTaskPane.Visible = true; / 通过DockPosition属性来控制任务窗体的停靠位置, / 设置为 MsoCTPDockPosition.msoCTPDockPosit

20、ionRight这个代表停靠到右边,这个值也是默认值 /helpTaskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight; / 当用户点击 “Excel help”右上角的X按钮关闭时,我们需要同步选项卡上button的状态 helpTaskPane.VisibleChanged += new EventHandler(helpTaskPane_VisibleChanged); / 添加上下文菜单 /AddToCellMenu(); private void ThisAddIn_Shutdown(object send

21、er, System.EventArgs e) / 用户点击 Excel Help 侧边栏右上角的X按钮关闭它时 / 我们需要正确同步 “帮助”按钮的状态 / 我们可以通过处理 “Excel Help”侧边栏的VisualChanged 事件完成 private void helpTaskPane_VisibleChanged(object sender, EventArgs e) / 获得Help Ribbon 对象 Help helpRibbon = Globals.Ribbons.GetRibbon(); / 同步Help Ribbon下的帮助按钮的状态 helpRibbon.toggl

22、eHelpBtn.Checked = Globals.ThisAddIn.helpTaskPane.Visible; 运行效果图为: 四、自定义上下文菜单看完上面两部分的实现之后,我在学习的过程中又想能不能通过右键菜单来显示/隐藏任务窗体呢? 对于这点VSTO也是可以做到的,我们只需要添加CommandBarButton对象(当我们右键一个单元格(即为Cell)的时候,我们可以看到一上下文菜单,菜单内所有控件(不管是按钮还是排序这样的菜单控件)),然后设置该对象的属性和添加一个Click事件,主要代码如下: / 添加一个自定义按钮到单元格上下文菜单中 contextMenu =Applicat

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

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!