ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 8939|回复: 10

开始学VSTO不算太晚

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-12-16 20:29 | 显示全部楼层 |阅读模式
OFFICE以后的版本是不是就用VSTO了?
最近 开始学VB2005 .NETFRAMEWORK2.0下的编程。。。
恐怕过些年国内的企业OFFICE也要更新换代了吧??
现在开始学.NET或许还不算晚。。。

TA的精华主题

TA的得分主题

发表于 2009-12-16 20:45 | 显示全部楼层
过不了多久估计大家都换用别的office了。
不过学什么都有用的。

TA的精华主题

TA的得分主题

发表于 2009-12-16 20:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VSTO,据我的感觉VBA至少还要活10年以上。VSTO不是那么容易大众化的。

TA的精华主题

TA的得分主题

发表于 2009-12-16 20:50 | 显示全部楼层
原帖由 flying_micky 于 2009-12-16 20:29 发表
OFFICE以后的版本是不是就用VSTO了?
最近 开始学VB2005 .NETFRAMEWORK2.0下的编程。。。
恐怕过些年国内的企业OFFICE也要更新换代了吧??
现在开始学.NET或许还不算晚。。。


看看下文:
.什么是VSTO
个人的理解,VSTOVisual Studio的一个package。做过Visual Studio 扩展的人可能知道,Visual Studio可以通过三种方式进行功能的扩展开发:Macro, Add-In, Package。而整个Visual Studio可以看作由所有具有不同功能的Package组合而成的,这些Packages就是Winform, SmartDevice, Web Development等等。而VSTO是他们之中的一员,它支持用托管代码来进行Office的扩展开发。
在过去,人们通常使用VBA来进行Office的扩展开发。VBA是一个很简单的开发环境,集成在很多Office的产品中。每个Office的产品,如WordExcelOutlook,都通过COM暴露了非常丰富的对象模型,供程序员编程。我们就是用VBA和这些OfficeCOM对象模型对Office进行扩展开发的。最常见的是增加一些自定义的按钮,还有自定义响应一些事件。但是VBA有很多不足之处。首先,它只面对VB脚本语言,并且开发环境显得简单,不够强大。最致命的是,VBA把代码分别嵌入到每个文档中去,这导致万一出现bug,或者项目需要升级时,就很难处理。需要对于每个文档进行修改,这种低效率在企业级应用中是无法容忍的。VBA的另一个问题:安全保护做得很薄弱,很多人可以利用宏制造病毒。
Microsoft想用Visual Studio .NET.NET Framework来解决这些问题,所以VSTO应运而生。官方文档上描述的是,目前发布了的VSTO有两个版本VSTO 2005VSTO 2005 SE。前者提供了6种项目模板: Word DocumentWord TemplateExcel DocumentExcel TemplateOutlook Add InInfoPath Form Template。这里所有的模板都只是针对于Office 2003而言的。除了Outlook Add In之外,所有模板用来开发文档级应用。VSTO 2005 SE(Second Edition), 提供了11种模板,全部都是Add In:包括Word, Excel, Outlook, PowerPoint, Visio20032007 Add In 10个,再加一个InfoPath 2007Add In. 所谓的Add In, 就是常说的插件,或者叫程序级应用。事实上,VSTO 2005VSTO的第二个版本,第一个版本是VSTO 2003, 集成在Visual Studio .NET之中,它是微软第一次尝试将.NET托管代码与Office对象模型整合到一块儿。它是我们现在看到的VSTO 2005的一个框架,VSTO 2005比它多了很多功能,如ActionsPane, DataCache, SmartTag等等。

.文档级和应用程序级项目的区别
那什么是文档级应用,什么是程序级应用,它们有什么区别呢?
文档级应用就是所写的代码,都是针对于某单个文档而言的。只有在用户打开这个文档时,自定义代码才会被装载。
而程序级应用是指,无论用户是打开哪个文档,还是新建一个空白文档,只要他打开相应的Office程序,自定义代码都会被装载。
这两种不同的行为决定了,文档级应用和程序级应用,采用了不同的实现方式。事实上,它们两个都是将代码编译到一个程序集(assembly)里面,也就是托管代码中的dll文件。不同的是,对于不同的应用,如何告诉Office到哪儿去找这个dll文件并装载它呢?Microsoft使用了一个叫manifest的东西,manifest记载了dll文件在哪儿,以及代码的入口点是什么。。。。。
Add In把manifest单独作为一个文件部署,每当用户打开Office的时候,Office会先到注册表中寻找插件信息,其中包括了manifest的存储位置。找到manifest后,再根据manifest中的信息加载dll中的代码。所有COM Add In信息存储在注册表如下的位置:(如果是给所有用户部署的Add In,也有可能在HKLM中的对应位置)
HKCU\Software\Microsoft\Office\.......
程序级应用的manifest是一个XML文件,可以用notepad打开并修改,格式如下:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" manifestVersion="1.0">

<assemblyIdentity name="ExcelAddIn1.dll" version="1.0.0.0" />


<asmv2:entryPoint name="Startup" dependencyName="dependency0">


<asmv2:clrClassInvocation class="ExcelAddIn1.ThisAddIn" />


</asmv2:entryPoint>


<asmv2:dependency asmv2:name="dependency0">


<asmv2:dependentAssembly>


<assemblyIdentity name="ExcelAddIn1" version="1.0.0.0" />


</asmv2:dependentAssembly>


<asmv2:installFrom codebase="ExcelAddIn1.dll" />


</asmv2:dependency>

</assembly>



文档级应用,有所不同,它把manifest嵌入到了文档里面,每当这个文档被打开的时候,Office从该文档内嵌的manifest中得到dll的信息,然后装载我们的代码。因为文档级应用的manifest是内置的,所以修改起来比较麻烦。我们可以使用ServerDocument提供的几个方法来修改dll文件的位置。代码如下:
               
string solutionDocument = @"C:\Documents\ExcelApplication.xls";
string assemblyName = "ExcelApplication.dll";
string manifestPath = @"\\servername\deployshare\ExcelApplication.application";
string applicationVersion = "1.0.0.1";

if (ServerDocument.IsCustomized(solutionDocument))
{

ServerDocument.RemoveCustomization(solutionDocument);

}

ServerDocument.AddCustomization(

solutionDocument, assemblyName, manifestPath,


applicationVersion, false);



此外Microsoft还提供了一个免费的工具可以用来修改Office 2003文档内嵌的manifest, 叫做ApplicationManifestEditorMSDN上有一个很详细的Walkthrough来介绍ApplicationManifestEditor: http://msdn2.microsoft.com/en-us/library/aa537185(office.11).aspx

新版VSTO
VSTO的下一个版本是VSTO 3, 集成在Visual Studio 2008中,现在尚处于Beta 2版本,大概年底会发布。VSTO 3新添加了对很多项目的支持,所有项目模板如下图:


               



VSTO 3
的新功能:

  • Office 2007的文档级应用的支持,
  • 可视化的自定义Office2007Ribbon
  • Visual Studio 2008设计Outlook Form Region

  • Share Point Workflows 项目等。

TA的精华主题

TA的得分主题

发表于 2009-12-16 21:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 amolin 于 2009-12-16 20:48 发表
VSTO,据我的感觉VBA至少还要活10年以上。VSTO不是那么容易大众化的。


就目前而言佷难讲是10年或是20年,Ms的office2007的VBA功能很弱,也是希望:用户可以去VBA,但office2010却将VBA又加强了,为什么?
1 VSTO作为VBA的替换,目前时机不成熟,且VSTO的编程模式决定了其企业级应用的方向,至少编程和部署较为麻烦
2 早在VBA诞生之初Ms即希望用户更多的来使用C来扩展office,并且有专门的sdk 但使用者寥寥,VB 的com却越来越多的人使用
3 实际上VB6非.net的编程已经有10多年了,Win7目前还必须要考虑支持,这是因为其有生命力,这个生命力是由用户决定的,因为个人用户开始慢慢熟悉和掌握VB的编程,从网上的资料即可看出,没有那个编程语言的资料有VB的多
4 VBA也一样,从论坛早期的阳春三月到目前的下里巴,说明这个东东越来越被用户接收和熟练使用,形成习惯就难改了
5 VBA是VB的一个应用分支或子集,VB6到现在已经好久了,也就是说VBA的功能和用户体验还是10前的模样,这也未免太老了

就此Ms处在了十字路口
这个回答只有Ms知道,个人认为VSTO成不了气候,其安全性也待考量,当你将VSTO编程的东东给被人,别人不一定能用,要求的支持环境复杂
实际将来取代VBA的应该是Ms针对个人用户的编程器( 好像目前并未出世)

这就相当于当初设计编程语言的人希望编程每个使用电脑的都会,可实际是编程语言成了专业人员掌握的内容,普通人只需点个按钮,打几个字
未来的编程也应该是一般使用者可以简单学习就可掌握的普通编程语言和专业人员掌握的专业编程语言两类
VSTO就目前属于后者

TA的精华主题

TA的得分主题

发表于 2009-12-16 21:42 | 显示全部楼层
VBa不可能功能十分强大,要不就成VB了,MS是以赚钱为主的。
所以我看Y肯定会出新的东西。
不过dot net似乎不太成功啊。

TA的精华主题

TA的得分主题

发表于 2009-12-17 08:03 | 显示全部楼层
原帖由 dul 于 2009-12-16 21:23 发表


就目前而言佷难讲是10年或是20年,Ms的office2007的VBA功能很弱,也是希望:用户可以去VBA,但office2010却将VBA又加强了,为什么?
1 VSTO作为VBA的替换,目前时机不成熟,且VSTO的编程模式决定了其企业级应用 ...


支持你的观点!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-18 23:18 | 显示全部楼层
以后随着操作系统的更新,不管是被MS强迫的还是自愿的。。。
操作系统肯定会把新的技术兼容进去
就跟以前的MSDOS到现在WINXP

TA的精华主题

TA的得分主题

发表于 2010-11-20 16:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-16 00:08 | 显示全部楼层
固守03仰望07,迷茫与2010;
卑微的无产者,在版本更新中喘息!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:46 , Processed in 0.039064 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表