一、VSTO开发概述
VSTO(Visual Studio Tools for Office),就是制作Office的COM加载项。
二、C#语法基础
1、变量的声明和赋值
string s= "vsto";
bool b = true;
2、条件选择语句
int i;
i = -5;
if (i > 0) {
MessageBox.Show(i+"是正数");
}else if(i==0){
MessageBox.Show(i + "是零");
}else{
MessageBox.Show(i + "是负数");
}
3、循环语句
3.1while循环
int i;
i = 0;
while(i<10){
i+=1;
}
3.2for循环
int i;
int sum=0;
for (i=0;i<=10 ;i++ ) {
sum = sum + i;
}
3.3foreach语句
int[] arr={2,5,7};
foreach(int b in arr){
MessageBox.Show(b.ToString());
}
4、命名空间
using System.Windows.Forms;
三、窗体和控件设计技术
1、添加新窗体
1.1右击Solution Explorer的项目名称→Add→Windows Form,如下:
1.2创建新窗体Form2后,可使用如下语句打开这个窗体:
Form2 f2 = new Form2();
f2.Show();
// f2.ShowDialog();//模态对话框
// f2.Dispose();//窗体销毁
//this.button1.Visible = this.checkBox1.Checked; //复选框示例
2、为窗体添加菜单
2.1在窗体设计的ToolBox中找到MenuStrip并拖动到窗口中,如下:
2.2选中添加的MenuStrip,即可添加菜单,如下:
3、添加打开窗体对话框
3.1在ToolBox中添加OpenFileDialog控件,如下:
3.2在代码中就可以直接使用OpenFileDialog控件了,如下:
this.openFileDialog1.ShowDialog();
this.openFileDialog1.FileName;//这句就可以获取打开对话框选中的文件
4、运行期间动态增删控件
4.1添加文本框示例
TextBox tx = new TextBox();
tx.Text = "Text";
tx.BackColor = Color.Cyan;
tx.Left = 20;
tx.Top = 20;
this.Controls.Add(tx);
5、手动创建控件事件
5.1在ToolBox中拖动一个Button控件到窗体,然后在窗体的Load事件中添加如下代码:
this.button3.Click+=button3_Click;
5.2编写按钮的响应函数如下:
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show("ButtonClicked!");
}
四、类的创建和使用
1、添加可供调用的公共类
1.1右击解决方案→Add→Class,如下:
1.2在class里添加变量及函数如下:
class Class1
{
public int i = 36;
public string ss = "vsto";
public void proc()
{
MessageBox.Show("From proc");
}
public int sum(int a, int b, int c)
{
return a + b + c;
}
}
1.3在其他地方调用类
//调用类
Class1 test = new Class1();//类的实例化
MessageBox.Show(test.i.ToString());
test.proc();
this.Text = test.sum(2, 4, 5).ToString();
五、C#操作Excel对象(非VSTO项目)
1、使用Windows窗体程序操作已经打开的Excel。
1.1打开一个Excel待用,然后打开visual studio中新建一个Windows窗体应用程序,如下:
1.2添加Excel引用,如下:
1.3代码中添加Excel引用,如下:
using Excel = Microsoft.Office.Interop.Excel;
1.4在类中定义一个Excel类对象,如下:
1.5代码中获取已经打开的Excel进行操作,如下:
xlsApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel.Range rg;
rg=xlsApp.Range["C2:C5"];
rg.Select();
rg.Interior.Color = Color.Blue;
this.Text =Convert.ToString(xlsApp.ActiveCell.Value);
1.6遍历Excel各个工作簿,如下:
foreach (Excel.Workbook wbk in xlsApp.Workbooks) {
MessageBox.Show(wbk.Name);
}
//以下语句直接获取第一个工作簿:
Excel.Workbook wbk=xlsApp.Workbooks[1];
MessageBox.Show(wbk.Name);
2、C#处理Excel的事件过程
2.1代码中获取工作簿中工作表并为其添加事件:
xlsApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel.Workbook wbk=xlsApp.Workbooks[1];//获取工作簿
Excel.Worksheet wst = wbk.Worksheets["Sheet1"];//获取工作表
// wst.Range["A1:C4"].Value = 56;//设置range中的值
//为工作表添加事件
wst.SelectionChange+= new Excel.DocEvents_SelectionChangeEventHandler(MyEvent);
小技巧:查看事件定义,选中事件,右击→转到定义,如下:
2.2添加事件响应函数如下:
private void MyEvent(Excel.Range Target) {
Target.Merge();
}
2.3取消事件,如下:
wst.SelectionChange-= new Excel.DocEvents_SelectionChangeEventHandler(MyEvent);
六、创建Office外接程序
1、Excel外接程序
1.1打开visual studio 2010,新建一个Excel2010外接程序如下:
1.2加载项启动时执行的代码,如下:
public Excel.Application xlsApp;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
xlsApp = Globals.ThisAddIn.Application;
xlsApp.ActiveCell.Value = "VSTO";
}
2、外接程序添加窗体
2.1右击项目,Add→NewItem,如下:
2.2选择WindowsForm,如下:
2.3在代码中使用这个窗体,如下:
Form1 fm = new Form1();
fm.Show();
fm.Text = "MyForm";
2.4窗体中文本框控件的文本发送给当前Excel活动单元格,如下:
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace ExcelAddIn1
{
public partial class Form1 : Form
{
public Excel.Application excelApp;
public Form1()
{
InitializeComponent();
excelApp = Globals.ThisAddIn.Application;
}
private void button1_Click(object sender, EventArgs e)
{
excelApp.ActiveCell.Value = this.textBox1.Text;
}
}
}
3、C#读写Excel
1、获取当前单元格的地址,如下:
//获取当前单元格地址,也可以使用Address;
this.textBox1.Text = excelApp.ActiveCell.get_Address();
//新建工作簿
Excel.Workbook wbk= excelApp.Workbooks.Add();
//定义一个Range
Excel.Range rg;
rg = excelApp.Range["A1:B6"];
七、外接程序使用Ribbon设计器自定义Office功能区
1、使用Ribbon设计器
1.1项目中添加新项Ribbon,如下所示:
1.2添加后会在ToolBox中出现Ribbon的控件,这样就可以添加控件,也可设置属性,如下:
1.3让功能区独立出来显示,可设置tab的ControlIdType属性为Custom,如下:
2、设置按钮的图标
2.1设置内置按钮的图标,在Button按钮的属性中,设置OfficeImageId为内置图标名称,如下:
2.2设置为自定义图标
(1)设置按钮属性为大图标,即ControlSize为RibbonControlSizeLarge,如下:
(2)将图片添加到资源,双击项目的Resource.resx,如下:
(3)添加现有文件,选择图片进行添加,如下:
(4)然后就可以在Button的Image属性中找到添加的图片,如下:
(5)在Ribbon类中添加按钮的事件如下:
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace ExcelAddIn1
{
public partial class Ribbon1
{
public Excel.Application xlsApp;
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
xlsApp = Globals.ThisAddIn.Application;
}
private void button2_Click(object sender, RibbonControlEventArgs e)
{
xlsApp.ActiveCell.Value = 0;
}
}
}
3、DialogLauncher控件的用法(对话框显示详细设置)
1、为组Group添加DialogLauncher,如下图:
1.1选中Ribbon的Group,点击右箭头,如下:
1.2点击后,就会在group中添加DialogLauncher,如下:
1.3选中Group,设置事件DialogLauncherClick,如下:
八、外接程序使用XML自定义Office功能区
Ribbon设计器的缺陷:无法添加右键菜单、无法添加快速访问工具栏等。
- 使用XML的Ribbon
1.1新建一个Excel外接程序,如下:
1.2在程序中添加Ribbon(XML),如下:
1.3添加后会有XML文件,如下:
1.4编辑xml,添加一个选项卡两个组,如下:
<tab id="tab1" label="xmlTab">
<group id="g1" label="xml">
<button id="button1" label="From XML" onAction="boa" imageMso="B" size="large"/>
</group>
<group id="g2" label="xml">
</group>
</tab>
1.5将xml对应的Csharp文件(这里是 )中的CreateRibbonExtensibilityObject
复制到外接程序的主CS文件 中,如下:
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new Ribbon2();
}
1.6在xml对应的cs文件( )中添加回调函数,如下:
public void boa(Office.IRibbonControl control)
{
if (control.Id == "button1") {//若多个按钮的回调函数同名,则根据按钮Id判断是哪个按钮点击 System.Windows.Forms.MessageBox.Show(Globals.ThisAddIn.Application.Version);
}
}
- XML定制
2.1打开xml文件,在customUI标签内定制右键菜单、ribbon等,如下:
九、自定义任务窗格的设计
1、创建Excel外接程序项目
1.1打开visual studio 2010,新建Excel外接程序,如下:
1.2在项目中添加用户控件,如下:
1.3添加好后,就可以在这个任务窗格添加控件了,如下:
1.4在外接程序主cs(一般是ThisAddIn.cs)中添加如下代码显示任务窗格:
UserControl1 uc1;
Microsoft.Office.Tools.CustomTaskPane ctp1;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
uc1 = new UserControl1();//添加窗格后自动生成的类
ctp1 = Globals.ThisAddIn.CustomTaskPanes.Add(uc1,"VSTOTaskpane");
//初始位置
ctp1.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionTop;
ctp1.Visible = true;
}
1.5添加多个任务窗格,按照上面步骤添加即可。窗格示图如下:
十、VSTO开发office文档-文档操作窗格
1、创建文档级Excel,添加窗格
1.1打开visual studio 2010,创建一个Excel工作簿项目,如下:
1.2添加一个类如下:
1.3将类设置为公共静态类common,如下:
public static class common
{
}
1.4为此类添加office的引用,如下:
using Microsoft.Office.Tools.Excel;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
1.5在这个类中声明一个窗格、Excel程序、工具栏,如下:
public static Microsoft.Office.Tools.ActionsPane acp;
public static Office.CommandBar cmb;
public static Excel.Application ExcelApp;
1.6在ThisWorkbook.cs中的ThisWorkbook_Startup函数中添加代码实现静态类中一些变量的初始化,如下:
common.ExcelApp = this.Application;
common.acp = this.ActionsPane;
common.acp.Visible = true;
common.cmb=common.ExcelApp.CommandBars["task pane"];
1.7控制窗格的位置和显示,代码如下:
common.cmb.Position = Office.MsoBarPosition.msoBarTop;
common.cmb.Visible = true;
1.8创建窗格后会默认在视图功能区添加显示操作区,如下:
2、往文档操作窗格窗格中添加用户控件
2.1在项目中添加一个用户控件,如下:
2.2在用户控件中添加按钮等控件,设置控件属性,在控件中操作Excel,如下:
common.ExcelApp.ActiveCell.Value = "UC1";
2.3按上步骤添加多个用户控件,在ThisWorkbook.cs中定义用户控件对象并添加到Excel,如下:
UserControl uc1 = new UserControl1();
UserControl uc2 = new UserControl2();
common.acp.Controls.Add(uc1);
common.acp.Controls.Add(uc2);
2.4设置各个用户控件堆叠方向,如下:
common.acp.StackOrder = Microsoft.Office.Tools.StackStyle.FromTop;
2.5实现效果展示如下:
3、添加用户控件数组,添加多个同样的用户控件
3.1定义数组用户存放多个用户控件并添加,如下:
UserControl[] uc1 = new UserControl1[3];
uc1[0] = new UserControl1();
uc1[1] = new UserControl1();
uc1[2] = new UserControl1();
common.acp.Controls.AddRange(uc1);
4、不用用户控件,直接使用代码在窗格中添加文本框
4.1、添加文本框、按钮,如下:
TextBox tb1 = new TextBox();
tb1.Text = "vsto";
tb1.BackColor = System.Drawing.Color.Yellow;
tb1.Left = 20;
tb1.Top = 30;
tb1.Multiline = true;
tb1.Width = 100;
tb1.Height = 30;
Button btn = new Button();
btn.Text = "Button";
btn.Width = 100;
btn.Height = 30;
btn.Click+=new EventHandler(btn_Click);
common.acp.Controls.Add(tb1);
common.acp.Controls.Add(btn);
4.2添加按钮响应函数如下:
private void btn_Click(object sender, System.EventArgs e) {
MessageBox.Show((sender as Button).Text);
}
十一、VSTO外接程序的打包
1、使用Advanced Installer打包外连程序
1.1安装Advanced Installer,新建→加载项→Office Add-in,如下:
1.2前面按提示设置,下一步到“资源文件位置”,“从Visual Studio项目中导入的文件”浏览到sln解决方案,如下:
注意:此时,必须关闭sln这个解决方案。
1.3默认下一步到“加载项细节”,“选择用于创建该加载项的visual studio Tools for Office版本”选择“visual Studio 2010 Microsoft Office开发“,“选择目标的Microsoft Office版本”,选择“Microsoft Office 2010”,“选择目标的Microsoft Office 产品”选择你开发项目的类型,如下:
1.4下一步直到完成,点击“打开输出文件夹”按钮即可看到生成的安装程序,如下:
可交流分享经验,联系qq:329876601