ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 最基础的教学

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-16 12:49 | 显示全部楼层 |阅读模式
本帖最后由 excelhomesnake 于 2016-1-16 14:25 编辑


前言
       在此板块学习也有2个多月了,本来是预期可以从中学到很多东西,但却发现这里资源少得很,居然还不如去博客园的一个vsto系列博文.这里的讨论气氛也很冷清,感觉很多人都误入歧途,vsto当做是vba去学习,vba板块却是把vba当做是脚本在传播,自然而然,很多学习vsto的人都直接按照一些教学贴,在某个指定的地方写上所谓的代码,运行,报错,放弃.连开发环境也不去熟悉,结果就是走很多弯路,事倍功半.
       目前也看不到这板块有任何介绍开发环境的贴,同时看到有些同学问一些很基础的问题,因此本贴描述一下我所知道的最基本也重要的知识.希望对之后希望学习vsto的同学有所帮助.内容中尽可能少涉及代码方面,前期基本是不会涉及vsto,但却是理解vsto至关重要的知识.
本人的语言栈是 R -> python -> excel函数 -> vba -> C#,C#的目的是为了数据挖掘之前的处理,看重的是C#的语义表达比较好.虽然很多人觉得从vba转到.net,vb.net比较容易,但其实vb.net的关键字比C#多不少,还是建议学C#.之后的内容,尽可能同时介绍vb.net的一些关键字.至于框架的内容,对应什么的.net语言都是一样的.
大概内容规划如下:


  • VS的文档结构,项目模板

  • VS常用快捷键,代码段

  • 多态应用


评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-16 13:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
开发IDE -> VS
         很多人入门了vsto,总是感觉开发效率比vba要低不少,原因就在于没有用好VS,这里就介绍VS的使用,包括:项目文件管理结构,一些常用的快捷键,等等.用好VS,甚至于连C#vb.net的语法都不需要花太多心思去记忆.
l  VS的文档层次结构

vs文档层次

vs文档层次
大概如上图,有以下注意点:
1.      一个VS一次只能打开一个解决方案.但其实可以同时打开多个VS进程的.
2.      解决方案是用来管理多个项目
3.      项目就是我们平时创建的一个vsto或一个winForm或一个控制台项目
4.      如上图,如果你用VS打开解决方案A,修改了项目b,然后用VS打开解决方案B,看到里面的项目b就会是修改后的内容.
接下来,我们来打开一下VS来证明一下
vs操作_1.png
刚刚打开的VS就像一个只打开Excel程序而没有打开工作簿一样,没有多大作用.选择新建项目,就可以从中选择一个模板来进行开发.vsto只是其中的一个模板而已.当然也可以在菜单里面打开一个已经存在的项目.
vs操作_2.png
这里继续点新建项目之后的界面.这里就选一个你希望开发的类型的模板.
什么是模板呢?其实说白了,就是微软为了让我们少打一些固定套路的代码,让VS自动生成一些代码,让我们可以更轻松地开发.例如:vsto模板里面,就包含了很多初始化,加载,验证的代码.

为了简单说明,这里我们选择”控制台应用程序”模板.
vs操作_3.png
1.       就是著名的<解决方案资源管理器>,如果你的vs没有这个窗口,百度下呗.
2.       就是一个解决方案了,正如之前所说,一个VS只能打开一个解决方案,因此,这里永远只能看到一个解决方案
3.       就是一个项目了,也就是刚刚我们新建的项目,这里已经说明了,VS总是以解决方案为单位来管理文档.
4.       这里就是模板帮我们创建的代码,这个是保存在cs为后缀的文件中.如果是vb.net是其他的后缀名字.

接下来,我们来证明一下,VS不能同时打开多个解决方案.还有如何往一个解决方案里面添加项目

选择 菜单 -> “文件” -> “新建” -> “项目
vs操作_4.png
vs操作_5.png
因为刚刚新建的项目还没有保存,这个时候VS准备要关闭这个解决方案,因此问我们是否需要保存.很明显,我们从菜单里面选择再次新建一个项目,就会创建一个新的解决方案,因此,VS需要关闭目前打开的解决方案才可以.
同理,如果我们需要往一个解决方案添加项目,那么就从菜单里面选添加
菜单 -> “文件” -> “添加”-> “新建项目”|”现有项目

TA的精华主题

TA的得分主题

发表于 2016-1-16 13:07 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-16 16:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
文件
         之前说的只是在vs里面看到的东西,那么这里就先看看电脑到底保存了什么.我们把之前介绍中,新建的项目保存下来.
文件_1.png
说明:
1.       上图就是这个项目的所有文件.vs的解决方案管理,一定程度上就是用来管理这些文件的.
2.       后缀是.sln的文件,就是解决方案了,双击它,就会使用vs打开.实际上,.sln文件只是一个数据文件而已,里面记录这一些基本信息,例如:解决方案有哪些项目等等.有兴趣的话,可以把后缀修改为.txt,然后用记事本打开看看.
3.       后缀是.csproj的文件,是项目文件.同理,双击它,就会使用vs打开.但之前也说过,vs总是以解决方案为单位来打开,因此,这里实际是打开这个项目所在的解决方案.同理,这个文件实际是xml结构的数据文件,也可以把后缀修改为.txt.xml来打开查看
4.       文件夹objproperties我们暂时跳过.
5.       文件夹bin里面就是保存了这个项目编译出来的程序集(exedll),里面包含了两个文件夹DebugRelease.vsdebug配置编译出来的程序集就会放到Debug文件夹中,因为debug模式方便vs调试,因此程序的运行效率比较低.release编译的就是有一定优化的程序集.具体可自行百度咯.
6.       到这里,大家应该要理解很重要的一点,解决方案,其实只是一个虚拟的概念,不过是用来组织多个项目的东西,就好像浏览器的收藏夹一样,保存的只是项目的路径.本地真正保存文件的单位是项目.
上述的所有文件,都可以直接在vs的解决方案管理器里面开到和管理,所谓的管理,其实就是如下:
1.       往解决方案添加项目.很简单,鼠标右键解决方案,在菜单选添加,然后一步步选下去,就可以添加
2.       往某个项目添加东西,例如添加代码文件,添加文件夹,移动各种文件.同理,直接鼠标移动需要操作的项目上,鼠标右键菜单,选择添加.
3.       里面实际上还有包含诸如配置文件等概念,但我觉得不适合在这里介绍,因此跳过.

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-16 20:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
程序结构
         本来打算补充一下VS的文档相关方面的知识,但思前想后,觉得说得太深入,难免增加了入门的成本,因此,还是点到即止,其他知识建议大伙另外查阅资料.
         从这里开始,应该会很多涉及到代码方面的.但本帖不介绍语言的语法,只介绍一个成形可用的代码最基本的结构,一旦理解了最基本的机构,vb.netC#其实是没有多大的区别.
内容涉及很多.大概如下:
1.       程序集引用
2.       命名空间导入
3.       如何创建一个类
4.       使用vs的对象浏览器,查找某个类所在的程序集和命名空间
5.       多个类和多个代码文件的管理
6.       代码段的使用
程序集引用
程序到底是怎么执行的?
         这里我就忽略掉中间的那些托管概念吧,简单来说,我们写出来的所有功能,其实都是去调用微软写好的标准库的功能.就好像在vba里面你使用字典一样,你不需要知道哈希原理,甚至于不明白为什么用字典重复查找会很快,你同样可以随意用那个字典类来做很多事情.那么,一个项目需要什么的程序集(或者说dll)?
如下图:
程序集引用_1.png
程序集引用_2.png
我们点开一个项目的引用文件夹,就可以看到这个项目基本需要的dll(为了方便,下面全用dll来代替程序集).这里也可以看到模板的作用.如果你现在是在查看一个vsto项目,就可以看到比这个多很多的引用.
下面说明一下:
1.       上图看到的引用,其实很多不是必须,但由于是常用,所以vs也默认加载.例如:System.Xml.
2.       我们可以按照自己的需求来任意添加或移除.
3.       Vs默认的程序集引用,都不需要copy到你的项目编译文件夹中(就是文件夹debugrelease).因为这些dll是在GAC.简单来说,这些dll在有安装正确版本的.net framework的电脑中肯定存在,因此,如果你的代码中用到他们的功能,自然会到GAC中找到.留意图2,看到System程序集的属性,里面其中有一项复制本地”,False就是代码编译的时候,不需要把这个dll复制到项目编译文件夹中.别问我那个属性窗口怎么出来(鼠标右键一般都会有惊喜的)
4.       并不是说,只要别人的电脑有这些dll,就肯定可以运行你的程序,因为还需要.net framework来管理一切运行细节,例如内存管理等.
5.       同一台电脑里面可以同时有不同版本的.net frameworkdll.这应该算是微软的失算.
6.       当你要使用某个类的时候,首先要确保这个类的所在dll,已经在你的项目引用中.
7.       如何知道某个项目的.net版本呢?这个可以在项目的属性里面查看和修改.选中项目,鼠标右键 -> 属性 ,里面自己找找.百度下

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-16 20:35 | 显示全部楼层
命名空间
         先简单说一下在.net下的最小编程单位,. 你可以把它看做是vba的模块吧.一个类一般负责一个小功能.因此,我们使用.net编程,很多时候是自己写一个类,在类里面调用其他的类,这里先不深入讨论类.上节说的程序集里面一般会包含很多的类,想想成百上千的类,有点头疼了.因此,加入了一个命名空间的概念,用来把相同功能的类,归纳到一个相同的命名空间下,这样既可以方便使用者查找某个类,也可以一定程度上防止类的名字重复的问题.
结构如下图:
命名空间_1.png
说明一下:
1.       一个程序集里面可以有多个命名空间
2.       一个命名空间里面,可以有多个类,当然,类的名字不能重复
3.       一个类只能属于一个命名空间
4.       特别的是,不同的程序集之间,是可以有相同名字的命名空间.如上图的命名空间b
5.       不同的命名空间下,是可以有相同名字的类.例如上图的类1,同时出现在命名空间ab里面
说这么多,应该头有点晕了,我们用个例子来说明.假如现在我们需要使用上图的类1,我们要做两件事情.
1.       在项目引用中,添加Dll_A的程序集.
2.       在你要用这个类1的代码界面中(就是.cs后缀的文件,之后会说明),用代码导入命名空间.
这样在这个界面里面,你就可以使用类1.
命名空间_2.png
注意:这里其实有很多命名冲突的情况.不过,建议大家先别纠结.之后遇到,自行再搜资料.毕竟,相同的命名空间,相同的类,是很少见的.

TA的精华主题

TA的得分主题

发表于 2016-1-19 14:56 | 显示全部楼层
本帖最后由 sxhus 于 2016-1-19 14:59 编辑

多谢,一直想学习VSTO,但不知怎么入门,最好录个视频最好了

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-20 11:40 | 显示全部楼层
sxhus 发表于 2016-1-19 14:56
多谢,一直想学习VSTO,但不知怎么入门,最好录个视频最好了

如果之前是没有学过任何面向对象的语言,建议别直接从vsto开始学习,因为即使你可以一开始抄写一些功能代码,但从入门到中级,你会发现自己的学习变得很辛苦

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-20 11:47 | 显示全部楼层
忙完项目,又可以忙里偷闲.利用一下工作的碎片时间继续内容.

之前的介绍,可以说是最基本的内容,但同时也很重要,务必要理解.接下来是说关于类的一些细节.但这里假设大家已经具备一些知识(如果不具备,请恶补一下.):

  • 类的使用,一般是通过实例化类成为对象,然后使用对象.
  • 类有3个基本性质,(属性,方法,事件)至少要知道前两者.



TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-20 12:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
         通过之前的内容,已经了解到,我们用.net,实际上就是在创建属于我们自己的程序集.按照层次,就是用vs创建项目 -> 定义命名空间 -> 在这些命名空间下定义类.
         这里我们在控制台项目下,新建一个代码文件来说明.下面是添加代码的文件的步骤和思路.
1.       由于代码文件是项目下的文件,因此,从解决方案资源管理器里面,鼠标点一下项目,鼠标右键 ->添加-> 新建项.  在打开的窗口,选类就可以.从下图也可以看到,在子菜单添加中,也可以直接选
2.       把类的名字定义成 MyClass.接下来就可以看看类的结构
(添加文件过程)
添加文件过程_1.png

(类的结构)
类的结构_1.png

(vb的类结构)
类的结构_2.png
1.       右边的解决方案管理器里面的文件名字(MyClass.cs)是可以随便修改的.
2.       左边就是一个类的文档结构.下面分别说明
3.       命名空间的导入.之前的章节也说过,当我们需要使用某个类的时候,就必须要先引用类所在的程序集,导入类所在的命名空间.指的就是这里.后面会详细说明
4.       我们定义的命名空间.通过一个关键字namespace + 自定义名字.在这个代码块里面定义的东西,都是属于这个命名空间.
5.       在命名空间里面,我们就可以定义一个类.通过关键字class + 自定义名字.

这里大概总结一下C#的语法特征(非常有用):
关键字什么的,我就不说了,因为很多书都有介绍.我这里说说什么时候需要花括号{},什么时候需要用分号;

首先,分号是C#的断句符号,就跟vb的换行符一样,检测到一个语句分号,就代表这句代码结束.代码结束有两个意思
1.       这句代码没有包含其他代码.就像上图的导入命名空间语句using System,因为这句不会包含其他代码,所以直接用分号结束
2.       这句代码会包含其他逻辑相关的其他代码.就像上图的自定义命名空间语句namespace ConsoleApplication1 ,这句的结束,其实是需要包含其他的代码,因此这里不是用分号,而是用{}来代表结束,{}里面写它包含的代码.一般把{}包含的代码叫做代码块.

理解上面两点,其他的语法你就会明白,例如:if语句,for语句等等.VB是一样的道理.只不过终结符合是换行符,而使用End xxxx 来代表代码块结束范围划定.

另外,可能你会觉得用vb好像打上面的语句很方便,毕竟直接按回车,就会自动出来End xxxx,而C#要打{},要用上shift键.但可以告诉你,打上面同样的代码,用C#其实不需要自己打上一个{}的键.这个在后面介绍代码段的时候会说到.

(待续)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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