1.首先需要安装VS,然后把需要的模块一起安装.
2.新建项目,VSTO外接程序.
3.新建好项目之后会生产以下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace ExcelAddIn1
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region VSTO 生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}
这些代码由项目自动生成,可以现在可以不用管他.
4.现在开始做插件,首先右键项目添加新项:选择office/SharePoint下的功能区(可视化设计器)如下图:
新建好了之后会有一个功能区给你,然后可以在上面增加各种控件,如下图:
然后我们在功能区点击右键属性,可以在右边看到它的各种设定,如果有需要可以随意修改,现在我们来新建一个按钮然后给按钮添加事件,具体操作如下:
直接把按钮拖进去,最后右键查看代码就会跳转到按钮定义的事件代码里边去了.
5.然后我们在里面添加代码,代码如下:
//获取当前活动的应用程序
Application app1 = Globals.ThisAddIn.Application;
app1.Visible = true;
//获取当前活动的活动页
_Workbook wb = app1.ActiveWorkbook;
//获取当前的sheet
Worksheet sheet1 = wb.Sheets[1];
// 获取当前页面A1的值,并修改
Range rng = sheet1.get_Range("A1", Type.Missing);
rng.Value2 = "hello";
由于百度上,官网上的实例代码全都是新建工作簿的方式修改,所以我这里把代码修改了下,改为了修改当前打开的工作簿的内容.
6.最后点启动,会自动启动excel,然后新建工作簿,然后会看到以下界面
然后点击刚才我们新建的按钮,A1的值就被修改成了Hello了.
7.一个简单的Excel插件建立好了之后,还需要给别人的电脑安装使用才行,这个时候就需要用到VS的发布功能了,然后我们点击项目右键发布功能,会弹出一个发布向导:
先指定好位置,然后下一步,会弹出个用户安装位置,这时我们选最后一个从CD-rom里面安装:
下一步,最后点完成,这样我们就会在目标文件夹里面得到1个文件夹2个安装文件如图:
这时就可以把这三个东西复制给别人用来安装了,安装成功后就会出现第5张图的界面了.
8.最后附上新建的按钮控件完整代码:
using System;
using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
namespace ExcelAddIn1
{
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
//获取当前活动的应用程序
Application app1 = Globals.ThisAddIn.Application;
app1.Visible = true;
//获取当前活动的活动页
_Workbook wb = app1.ActiveWorkbook;
//获取当前的sheet
Worksheet sheet1 = wb.Sheets[1];
// 获取当前页面A1的值,并修改
Range rng = sheet1.get_Range("A1", Type.Missing);
rng.Value2 = "hello";
}
}
}
纯手打记录,如果有问题可在下方留言.