Shared Add-in


浅谈Excel开发:十一 针对64位Excel的插件的开发和部署

自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集。 随着64位操作系统的安装,Office 2010及以上版本的普及以及计算机的内存容量越来越高,使用64位Excel的用户越来越多,所以让插件支持64位Excel能够赢得一部分用户。前面十篇文章中所讲解的技术适用于不同版本和不同位数的Excel,但是由于32位的COM组件不支持64位的Excel,所以在针对不同位数的Excel的编译和部署的时候,有些地方可能需要注意和有所不同。 64位版本的Office只能安装在64位的操作系统之上,32位的Office采用Windows-32-on-Windows-64 (WOW64) 技术可以安装在64位操作系统上,这也是32位Office在64位操作系统上的默认安装 …


浅谈Excel开发:八 Excel 项目的安装部署

前面几篇文章讲解了Excel开发的几个比较主要的也是比较重要的方面,比如菜单系统,Excel对象模型,自定义函数,RTD函数,异步自定义函数,用户自定义任务面板等,在实际开发中我们还会遇到各种“千奇百怪”的问题,以及开发中的一些注意事项和技巧等,后面有空我会写文介绍。当我们的Excel外接应用程序开发好了之后,需要给用户使用,这就涉及到了应用程序的安装与部署,本文就简要介绍下Excel项目的安装和部署。 和一般的.NET 中的Windows Form程序不同,Excel开发通常是一种插件式的开发机制,它需要借宿在Excel上,并通过调用Excel的API来实现特定的业务逻辑。宿主Excel在运行的时候,会根据当前用户以及Excel版本信息,读取注册表特定位置,以查找在本机当前用户下面注册的插件信息,然后逐个加载。这里面就涉及到了和安装部署相关的一些 …


浅谈Excel开发:七 Excel 自定义任务窗体

前面花了三篇文章讲解了Excel中的UDF函数,RTD函数和异步UDF函数,这些都是Excel开发中的重中之重。本文现在开始接着第二篇文章的菜单系统开始讲解Excel中可供开发的界面元素,本文要讲解的是Excel中的自定义任务面板(Custome Task Panel,CTP) 。 自定义任务面板在Office 2003中就引入了,相信大家都用过Word中的字典和插入剪贴画功能,左侧的边栏就是自定义面板。如下图: 但是Office 2003的自定义面板并没有给我们开发人员提供开发接口,也就是说,我们不能创建我们的自定义的任务面板。 从Office 2007版本开始,Office的一个显著变化是添加了更多的快速预览以及自定义面板,这在Office的各个产品中均有体现。如下图: 更重要的是,从Office 2007开始,CTP接口开放使得 …


浅谈Excel开发:六 Excel 异步自定义函数

上文介绍了Excel中的自定义函数(UDF ),它极大地扩展了Excel插件的功能,使得我们可以将业务逻辑以Excel函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表。 普通的UDF自定义函数的基本执行逻辑是,Excel接受用户输入的函数表达式,然后通过UDF函数的处理逻辑进行处理,在处理过程中,Excel 的UI界面会一直等待函数体执行完成之后更新单元格数据。和大多数同步应用一样,同步的UDF函数会阻塞Excel UI线程,并且不方便动态扩展计算能力,在处理逻辑比较复杂、进行耗时的计算逻辑的时候,会造成较差的用户体验。所以我们需要开发异步的UDF函数。 一 问题的提出 通常,当用户在Excel中输入自定义函数的时候,我们希望实现以下表现: 开启另外一根线程或者在线程池中处理函数计算逻辑(不同于Excel UI线程)。 同时立即 …


浅谈Excel开发:五 Excel RTD函数

上文介绍了Excel中的UDF函数,本文介绍一下同样重要的RTD函数。从Excel 2002开始,Excel引入了一种新的查看和更新实时数据的机制,即real-time data简称RTD函数,他是一种Push-Pull的方式,及在需要更新数据的时候,RTD给Excel Push一个消息说要更新数据,Excel在收到消息后主动拉取Pull新的数据。RTD函数最开始的用途在于更新实时变化的数据,比如股票实时行情数据,实时天气预报数据,球队比赛得分数据等等。 在过去,要实现这些功能,需要依赖一些其他诸如Dynamic Data Exchange(DDE)技术来访问实时数据资源,但DDE和标准的Excel函数样式有很大的不同,并且并不是为Excel获取实时数据而设计的,缺乏健壮性,并且效率不高,RTD的引入解决了这些问题。 本文首先介绍RTD的一些常用的使用场景, …


浅谈Excel开发:二 Excel 菜单系统

在开始Excel开发之前,需要把架子搭起来。最直接的那就是Excel里面的菜单了,他向用户直观的展现了我们的插件具有哪些功能。菜单出来之后我们就可以实现里面的事件和功能了。Excel菜单有两种形式,一种是Excel 2003及之前的传统菜单样式,一种是Excel 2007及之后的Ribbon菜单。本文首先讲解Excel 2007中菜单的创建,包括使用Visual Studio可视化设计菜单,菜单的RibbonXml配置,然后讲解如何在Excel 2003中创建自定义菜单。最后演示如何使用SharedAddin技术将两者结合起来,即在2003版本中显示原始的菜单样式,在以2003上版本中动态加载Ribbon菜单,从而达到版本的兼容。 一 Excel 的Ribbon菜单及Ribbon Xml文件 要演示菜单的创建,我们首先创建一个VSTO程序,如图在VS中创建一个Excel外接程序: …


浅谈Excel开发:一 Excel 开发概述

做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识。目前Office相关的开发资料是比较少的,最最开始的时候,我看的是一本英文资料,然后再就是MSDN上面去提问了。所以我想写一点东西,让大家也少走一些弯路。 这篇文章就简要介绍一下Office开发的一些相关的知识,使大家对这个有一个大体的了解。 首先来看一看Office 的开发方式。 一 Office开发方式 1 VBA (Visual Basic Application) VBA是一种Visual Basic的宏语言,它应该是最早的Office提供定制化的一种解决方案,在1994年发行的Excel 5.0版本中,就具备了VBA的宏功能。从名字上似乎可以看出他是VB的一个子集,和Visual …


一次Debug经历

周五天晚些时候,部门发布了一个“世界末日”版本的产品,我们小组参与了其中Office插件的开发工作。这算是一个比较重要的节点。产品发布后,在同事机器上安装部署之后,Office插件发现了一个比较严重的Bug,就是用户在打开一个已经存在的Excel文件的时候,我们的插件不能正常加载,因为之前开发调试的时候,都是直接选择Excel软件为启动项的,这样,每一次都是直接打开的Excel程序,而不是一个文件。在检查这个Bug的时候又发现了另外一个比较严重的Bug,就是Excel关闭之后,任务管理器中的Excel.exe这个进程没有关闭,这个Bug在开发阶段我注意到了,以为是开发阶段调试的时候才有的,所以没有太在意。于是乎跟领导们反应之后,领导过来说这个Bug能不能修复,最好能修复,不可以的话,叫测试那边注意一点儿就可以。我说可以,但是需要一点儿时间。我和另外一个同事开 …