officeba > 单独文章


excel2010中可编程的改进

可编程在Excel 2010的改进

Excel中一直是开发长期以来的商业解决方案的平台。开发人员编写代码来定制和扩展在许多方面Excel中 - 自动化Excel操作,用户界面自定义,数据输入Excel的形式和扩大与用户定义的函数公式,在一些关键的名字。许多开发人员创建非常复杂的应用,有严格的要求,推动Excel到了极限,因此,开发者总是更多的途径来完成这项工作前瞻性。

通过Office 2010一个拐角的后面,我们认为这将是有益的提及我们改进的Excel的可扩展性,今次的各种方法。

我将在这个职位涉及以下内容:

异步的UDF(用户定义的函数)
高性能计算机上运行远程的UDF(高性能计算)集群
Excel的4迁移到VBA宏
宏记录图表和形状
64位支持和代码兼容性
开放式XML SDK的改进
异步的UDF(用户定义函数)
说你有一个UDF这需要很长时间才能完成,但实际上并没有执行本地密集的处理器业务。例如,带回来的UDF从公共网络服务的股票报价。一个Excel计算线程调用的串行方式的UDF,一个接一个,每个调用完成之前进行了计算链等。因此,如果UDF是在工作表上,一个计算周期可多次不必要的花费很长的时间 - 一对一个单一的通话时间完成n阶。多线程不会重新计算的伎俩也。它不能很好地规模为这种情况下,因为多个线程的开销,因此它是不切实际的定义尽可能多线程,因为你的表上的UDF调用。

Excel中2010年使您作者这些非处理器的异步密集的UDF。这种能力是支持XLL中的加载项,和新的Excel 2010 SDK有你写异步UDF的需要。从本质上讲,你打破你的UDF两个:一个同步函数调用,它设置了异步计算,数据请求,外部Web服务电话等,并立即返回;和异步的一部分,它返回结果时,Excel的准备。 Excel的轨道UDF的调用之前尚未完成,并继续计算的独立部分。在某种程度上,该UDF调用的结果变为可用的加载项(这是通常由事件,引发如传入Web服务的结果,一个异步I / O操作完成,等)。加载项,然后调用返回到Excel与UDF的结果。

听起来复杂,但实际上并不难(假设你知道你的周围XLL中的发展方向)。假设你的XLL中加载有一个“正常”,同步UDF中,需要一到XLOPER12指针,并返回相同的:

LPXLOPER12 WINAPI MyNormalFunc(LPXLOPER12歌剧院)

为了成为第一个(可调用它)的异步UDF的一部分,您删除返回值(因为结果将是后来产生异步),并添加一个尾随int参数(我们将解释其目的1位):

无效WINAPI MyAsyncFunc(LPXLOPER12歌剧院,廉政asyncHandle)

注册此异步UDF中,你指定一个“”“在函数的字符串类型的返回值的类型(空隙) - 在字符串的字符代码指定每个参数的类型:

...

LPXLOPER12 pxTypeText =升“”二心“;

...

Excel12(xlfRegister,&xResult,5,&xModuleText,pxProcedure,

pxTypeText,pxFunctionText,pxArgumentText);

函数的新的尾部int参数用于异步调用处理,并就在Excel公式UDF的调用无形。在Excel模型作者所说的它与一个参数,就像原来的同步使用的函数的调用。 Excel中通过计算周期在一个独特的处理每次调用该函数,并使用处理跟踪其进展情况。您的外接应保持在每本处理实例轨道。后来,当这个UDF的调用的结果是准备好了,你加载代码使用句柄调用返回到Excel中,使用新的回调xlAsyncReturn,以便提供的结果(并在这一点上,该外接可以放弃处理)。在我们的例子,这应该类似于以下内容:

XLOPER12 xlResult;

LPXLOPER12 pxHandle; / /使它指向跟踪处理异步调用

LPXLOPER12 pxResult; / /使其指向您的UDF调用的结果

...

Excel12(xlAsyncReturn,&xlResult,2,pxHandle,pxResult);

好处?一个计算速度 - 一个计算的时间顺序而不是对N.秩序,大大促进如果一个股票报价需要1秒到来自网络服务的日子,和你有100个电话(假设在网络服务丰富资源侧),这意味着1秒,而不是100秒 - 真的很重要。

在新的Excel 2010 XLL中SDK测试版在网上也可以。它的所有源文件和文档,你需要创建异步的UDF。

高性能计算机上运行远程的UDF(高性能计算)集群
高计算能力的需求,许多组织的高性能计算集群。这是处理器(“节点”)大型阵列基础设施,计算工作,提交到群集节点,并收集结果。高度并行计算模型,可大大受益于高性能计算机。

说你有一个非常沉重的UDF计算,呼吁一些Excel工作表很多次,大多是独立的呼声彼此。至于到异步就不能真正帮助UDF的计算速度,所有的通话仍然需要计算但您的计算机,许多处理器是否同步或不。但如果你有一个在您的处置HPC集群,如果您能向那些功能调用的关闭将在群集计算,将大大提高您的工作表的计算速度。创建和管理高性能计算工作,但是,不是一件容易的任务,可能需要平凡的编码。

输入Excel 2010。高性能计算机管理员现在可以部署XLL中添加与支持UDF的插件(关于这个词在位)到群集的计算节点。 Excel用户可以配置一个计算集群将在计算中使用,在Excel中使用的选项的简单用户界面:

  


用户打开“允许用户定义XLL函数上运行计算集群”,选择类型(通常会有1 - 高性能计算集群,该组织有型),并在“选项”对话框,设置为群集的头节点的主机名。

如果这些措施到位,Excel会自动发送UDF调用起飞到群集异步,等待结果,并插入到Excel模型回来 - 无需修改任何的Excel模型所有!

支持UDF不可XLL中UDF的,都是由加入被称为“群集安全”,这意味着他们基本上是独立的计算 - 它们是无状态的,不回电话到Excel注册。群集安全UDF应该不执行任何操作,对本地机(储存非过程数据,打开的连接等)的状态依赖。一旦开发商验证群集的UDF是安全的,登记本身只是一个很小的修改,添加,在代码 - 增加的另一面旗子向登记要求的UDF。无需修改代码本身的功能,支持任何与HPC集群或远程调用管理层的沟通。所有有要做的,是添加“&”来注册的类型字符串:

...

LPXLOPER12 pxTypeText =蜇的“QQ&”;

...

Excel12(xlfRegister,&xResult,5,&xModuleText,pxProcedure,

pxTypeText,pxFunctionText,pxArgumentText);


显然,如果您现有的UDF是不支持群集的安全,你需要重写以这样的方式,这是它,以它注册为群集安全,并利用自动呼叫优势卸HPC集群。

总结:群集安全UDF的是卸载到一个高性能计算集群,而无需修改Excel的模式,而无需重写UDF的使用群集。漂亮整洁!

查询关于基于这在不久的将来博客具有专用的职位。

Excel的4迁移到VBA宏
之前到Excel的VBA引进,我们有我们自己的宏设施 - 被称为Excel的4宏,在Excel宏工作表使用。大多数人早已迁移他们的Excel 4宏VBA的,但是,一些Excel 4宏功能是从VBA,使这种迁移困难失踪。

在Excel 2010年,我们的目标之一是消除任何人以完成迁移的Excel 4宏VBA的剩余障碍。这项工作一般分为两类:

增加对剩余的几个Excel的宏功能4不具备在VBA等值的新对象,方法和Excel的对象模型属性。
性能改进页面设置操作在VBA中提供类似的性能PAGE.SETUP()在Excel 4宏功能。
我们已经完成了这项工作,在Excel 2010年,将用整个博客帖子这在不久的将来问题。

宏录制的图表和形状
当Excel 2007引入了产品的新的制图引擎,重点是现代化的图表和形状绘制功能。这是一个很大的投资,我们不得不作出一些痛苦的优先顺序的决定。这导致在Excel 2007中失去的图表和形状对象模型的一些条款与Excel 2003的兼容性,因此,宏录制功能。

在Excel 2010年,宏录制而运作良好,再次图表格式。在绝大多数的图表格式从Excel 2003的恢复和极少数例外,(轴文本格式录制功能是其中之一)。

我们已张贴在本会在Excel 2010图表增强博客几个条目。

64位支持和代码兼容性
办公室在2010年将推出32 - 和64位版本。 64位来说尤为重要,一些办公软件,部分地区遭受严重的可用内存地址空间方面今天在墙上。这本身就是一个重要议题,这是我们这里介绍。

Excel工作簿可以自由打开和编辑在32 - 和64位Excel中,没有什么具体的建筑保存的工作簿。对于自定义代码解决方案,但是,64位Excel中介绍了一些挑战:

ActiveX控件需要被移植 - 他们需要一个64位版本工作在64位进程。这包括微软自己的控制,其中许多已经被移植。我们正在评估的受欢迎程度和可能的移植其余的临界状态。
COM加载项,同样,需要为编制64位,以工作在64位Excel中。
XLL中加载项还需要编制的64位,而新的Excel 2010 XLL中SDK支持的。
VBA中:嵌入式VBA代码获得重新编译时包含Excel工作簿打开一个新的平台上,64位Excel中现在包括一个64位的VBA版本。因此,大多数刚工作VBA代码在64位。然而,VBA解决方案的一部分需要一些调整。它必须与申报,并与外部API调用指针/在参数列表处理。 VBA7,在新版本的VBA与Office 2010艘,支持代码,可以运行在32 - 位和64位办公室的发展。
为了让你的东西你可能需要修改在VBA代码调用外部API口味:

旧的32位,仅兼容声明:

声明函数RegOpenKeyA Lib“advapi32.dll中”(ByVal键长,ByVal子键为String,NewKey由于龙)只要

需要改变这个32 - 位和64位兼容的声明,如果你想要的代码在使用64位Excel中:

声明PtrSafe功能RegOpenKeyA Lib“advapire32.dll”(ByVal作为LongPtr,ByVal lpSubKey字符串,LongPtr phkResult)只要hKey

MSDN有一间约32位和64位的Office 2010版本兼容详细的文章。

此外,我们现在有一个工具,并有可能不兼容的旗帜点看在你的代码 - 在Microsoft Office 2010代码兼容性督察。该工具,除其他外,旗64在你的代码和提示位兼容性问题的解决办法的。

开放式XML SDK的改进
Open XML是Office应用程序核心的默认文件格式与Office 2007年开始。 XML的SDK的开放可以让开发人员创建和修改,而无需装载实际Office程序或使用其OM公司在独立的代码Office文件。这明显的优势,在许多情况下用于服务器,特别是基于应用程序。

2009年4月,办公室公布的Open XML SDK版本2,胎V1的重要补充首次CTP - 强类型的类和对象,内容建设,搜索和处理;和Office文件格式架构验证。

2009年12月,导致办公室2010年发表后,我们已经发布了开放的XML SDK的2.0微软Office第四CTP版。有向SDK的四大改进:

全力支持办公室2010 Open XML格式
办公室2010年模式和语义级别的验证
最近在一个开放XML SDK的可用性研究的通用改进
Open XML的SDK工具改进
更多的信息,在链接的职位。

资源
图表有关在Excel的博客帖子。
Excel中2010 - 现在,随着更多位!讨论了64位支持在Excel中。
与32位和64位的Office 2010版本兼容扩展了这个问题。
微软Office 2010的代码兼容性检查是找到代码中的潜在问题时,迁移到Office 2010非常有用的工具。
Excel中2010 XLL中SDK是,您可以下载该XLL中SDK测试版。
Open XML的SDK版本2描述在打开的XML SDK的相对其第一版本的改进。
为开放的XML SDK的2.0微软Office第四CTP版描述了2版的SDK最新的CTP的变化,导致2010年发布的Office,并下载信息。

声明:欢迎各大网站转载本站文章,还请保留一条能直接指向本站的超级链接,谢谢!

时间:2010-01-30 18:12:29,点击:65824


【OfficeBa论坛】:阅读本文时遇到了什么问题,可以到论坛进行交流!Excel专家邮件:342327115@qq.com(大家在Excel使用中遇到什么问题,可以咨询此邮箱)。

【声明】:以上文章或资料除注明为Office自创或编辑整理外,均为各方收集或网友推荐所得。其中摘录的内容以共享、研究为目的,不存在任何商业考虑。如有任何异议,请与本站联系,本站确认后将立即撤下。谢谢您的支持与理解!


相关评论

我要评论

评论内容