ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

谈谈vs2010 vsto C#入门

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-8 20:19 | 显示全部楼层 |阅读模式
个人觉得基于office使用C# vsto入门并不太难(只是入门的基本使用)
安装好vs2010后可以参照主页的演练跟着做,很容易掌握基本的操作。
比如:演练:创建您的第一个 Excel 文档级自定义项
http://msdn.microsoft.com/zh-CN/library/cc668197(v=vs.100).aspx

插件的演练
演练:创建您的第一个 Excel 应用程序级外接程序
http://msdn.microsoft.com/library/cc668205.aspx

这里以:举个例子:创建您的第一个 Excel 文档级自定义项

演练里的代码

  1. private void Sheet1_Startup(object sender, System.EventArgs e)
  2. {
  3.     Microsoft.Office.Tools.Excel.NamedRange nr =
  4.         this.Controls.AddNamedRange(this.Range["A2"], "NamedRange1");
  5.     nr.Value2 = "This text was added by using code";
  6. }
复制代码


1个激活工作表事件,3个简单的动作,工作表激活时定义一个命名控件,放在单元格A2的位置,对控件赋值。
点击生成,接着点击发布,然后选择一个安装路径。就做好自己的第一个程序级的工作簿。工作簿里看不到一行代码。
不要小看这个作品,做下去能添加许多功能。
晚上继续。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-8 21:51 | 显示全部楼层
操作VBA的基本动作有几个
1,获取对象
2,对获取的对象进行读取赋值包括外观属性的操作(颜色字体等等)
3,数组,很重要的方法
4,循环
5,判断,分支
学习C#也是从这方面入手。
如果做了演练的操作,那么就可以开始练习增加自己需要的功能
在原来的代码添加 对单元格的读取,赋值,数组操作,等等
代码很简单只是加了和VBA 代码比较的注释,其实很短。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. using System.Xml.Linq;
  8. using Microsoft.Office.Tools.Excel;
  9. using Microsoft.VisualStudio.Tools.Applications.Runtime;
  10. using Excel = Microsoft.Office.Interop.Excel;
  11. using Office = Microsoft.Office.Core;
  12. //System.Collections.Generic;使用字典
  13. namespace ExcelWorkbook4
  14. {
  15.     public partial class Sheet1
  16.     {
  17.         private void Sheet1_Startup(object sender, System.EventArgs e)
  18.         {
  19.             //VBA代码: Dim lRow as Long
  20.             int lRow;
  21.             //VBA代码:Dim rng1 As Range
  22.             Excel.Range rng1 = null;
  23.             //VBA代码: Dim sh As Worksheet
  24.             Excel.Worksheet sh;
  25.             //VBA代码:Set sh = ActiveSheet
  26.             sh = Application.ActiveSheet;
  27.             //VBA代码:sh.Cells(1, 5) = Now
  28.             sh.Cells[1 , 5].value = System.DateTime.Now;
  29.             //VBA代码:sh.Cells(1, 5).Columns.AutoFit,自动调整列宽
  30.             sh.Cells[1 , 5].EntireColumn.AutoFit();
  31.             //自定义函数或子过程,这里示意一个返回F列最大使用行值
  32.             lRow = DemoArray();
  33.             //VBA代码:Set rng1 = Range("c1")
  34.             rng1 = Application.get_Range("c1", missing);
  35.             //VBA代码:rng1.Value2 = "F列最大使用 " + lRow 赋值给引用对象。
  36.             rng1.Value2 = "F列最大使用 " + lRow;
  37.             
  38.         }

  39.         private void Sheet1_Shutdown(object sender, System.EventArgs e)
  40.         {
  41.         }
  42.         
  43.         private int DemoArray()
  44.         {
  45.             //子过程代码,数组定义,数组操赋值,把数组赋值给工作表Range
  46.             Excel.Range rng=null;
  47.             //VBA代码: Dim theArray(0 to 5,0 to 10)
  48.             int[,] theArray = new int[5, 10];
  49.             rng = Application.get_Range("b1", missing);
  50.             //Rank方法,返回数组的维度,这个VBA没有
  51.             rng.Value2= "数组维度 " + theArray.Rank;
  52.             //VBA代码:Dim m As Long
  53.             int m = 0;
  54.             //两个循环 For i = 0 to 5
  55.             //         For j = 0 to 10
  56.             //              m=m + 1
  57.             //              theArray(i,j) =m   
  58.             for (int i = 0; i <= theArray.GetUpperBound(0); i++)  
  59.                 for (int j = 0; j <= theArray.GetUpperBound(1); j++)
  60.                 {
  61.                     m++;
  62.                     theArray[i,j] = m;
  63.                 }
  64.             //VBA代码:Set rng = Range("f1:o5")
  65.             rng = Application.get_Range("f1", "o5");
  66.             //VBA代码:rng.Value = theArray    赋值给工作表Range
  67.             rng.Value2 = theArray;
  68.             int iRow;
  69.             rng = Application.get_Range("f1", missing);
  70.             //VBA代码:iRow = sh.Range("f1").End(xlDown).Row 取F列最大使用行
  71.             iRow = rng.get_End(Excel.XlDirection.xlDown).Row;
  72.             //返回数值给调用者
  73.             return iRow;
  74.         
  75.         }

  76.         #region VSTO 设计器生成的代码

  77.         /// <summary>
  78.         /// 设计器支持所需的方法 - 不要
  79.         /// 使用代码编辑器修改此方法的内容。
  80.         /// </summary>
  81.         private void InternalStartup()
  82.         {
  83.             this.Startup += new System.EventHandler(Sheet1_Startup);
  84.             this.Shutdown += new System.EventHandler(Sheet1_Shutdown);
  85.         }

  86.         #endregion

  87.     }
  88. }
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-8 21:55 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-8 21:58 | 显示全部楼层
HHAAMM 发表于 2012-11-8 21:55
支持下!!
楼主弄C#,我摸索着弄VB.NET

习惯了VBA,操作VB.NET似呼更容易入手。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-8 22:17 | 显示全部楼层
添加了功能演练源代码
代码测试通过
代码编译环境,win7 64 + office2010 64 + vs2010

ExcelWorkbook4.rar

429.94 KB, 下载次数: 531

TA的精华主题

TA的得分主题

发表于 2012-11-8 22:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xp + office2010 32 + vs2010

测试通过!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-8 22:38 | 显示全部楼层
HHAAMM 发表于 2012-11-8 22:35
xp + office2010 32 + vs2010

测试通过!!

有没有试过发布安装运行?

TA的精华主题

TA的得分主题

发表于 2012-11-8 22:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lipton 发表于 2012-11-8 22:38
有没有试过发布安装运行?

发布到D盘根目录,安装后运行工作簿,正常
将工作簿剪切到别的地方,代码失效
卸载程序后再次发布再次安装,还是失效

我有两台电脑,我测试过自己发布的在另一台win7 32没安装VS的电脑上的运行情况,一切都正常的。
这个是不是64维的问题啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-8 22:55 | 显示全部楼层
HHAAMM 发表于 2012-11-8 22:52
发布到D盘根目录,安装后运行工作簿,正常
将工作簿剪切到别的地方,代码失效
卸载程序后再次发布再次安 ...

那是因为发布的设置在D盘,要在发布设置改

TA的精华主题

TA的得分主题

发表于 2012-11-8 22:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可能是我机器的问题,自己写的那个字典也出问题了,重启下试试
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-5 01:54 , Processed in 0.052280 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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