使用Visual Studio进行Excel VSTO扩展程序开发:说明与基本操作

为Excel开发VSTO扩展程序

Excel应该是我们在日常工作中非常常用的一个效率工具,那么如果想要扩展Excel更多的业务功能,可以在VS开发环境中为Excel开发VSTO扩展程序,这样就可以借助微软为我们开放的操作Excel的接口,在Office的功能区添加选项卡、控件后完成一些我们所需的任何业务功能:
在这里插入图片描述

新建Excel VSTO外接程序

  1. 在VS中新建一个Excel扩展应用程序,如果没有找到这个选项,去红框里的VS安装程序中勾选Office开发选项即可(我使用的VS版本是2015、2017)
    在这里插入图片描述

  2. ThisAddIn. cs就是VSTO扩展程序的主入口,它提供了很多回调事件给我们使用

    在这里插入图片描述

  3. 在新建项目的解决方案中点击右键为Excel工程创建功能区,这个功能区就是Excel VSTO外界程序的用户界面
    在这里插入图片描述

  • 很简单的,工程建立完毕

基础的名称空间与抽象类型

了解两个常用的库

在VSTO的开发当中,会经常用到两个库:

using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Excel;

其中:

  • Interop.Excel名称空间
    • 一个微软提供给我们的访问Excel的COM接口,它最大的用处就是:利用它可以直接对Windows版本的Excel中的内容进行读写,例如:
      • 获取Excel中的所有工作表
      • 获取\修改Excel中的单元格
      • 新增一个worksheet页
      • 等等
  • Tools.Excel名称空间
    • 是一个用于扩展支持Office Excel对象模型的类库,利用它可以将.NET的其他组件与Excel配合在一起实现一些功能,例如:
      • 利用ListObject接口可以将DataTable实例与Excel的worksheet表进行关联的操作
      • 利用Chart接口可以为Excel的sheet添加一个图表

了解Excel开发中的抽象类型

  • 1、Application

    在VSTO程序中,Application接口代表了整个Excel应用程序

  • 2、WorkSheet

    WorkSheet对象是WorkSheets对象集的成员,是Excel中的sheet页的抽象

  • 3、Range

    Range对象就是对Excel中每一个单元格的抽象,或者是包含一个或多个单元格块的选定区域(这个区域可以是连续的也可以是不连续的)

以上这三个元素就是Excel在VSTO变成当中,最常用到的三个抽象接口

基本操作

在Excel工程中,在ThisAddIn文件中和项目的其他文件中,读写Excel元素的方式是不同的

  • 在ThisAddIn. cs文件中,访问Excel中的元素,直接用Application访问即可:
using Excel = Microsoft.Office.Interop.Excel;

Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
Excel.Range firstRow = activeWorksheet.get_Range("A1");
  • 但是在非ThisAddIn .cs文件当中,比如新建功能区的按钮事件,若想访问Excel元素,则必须在前边加上Globals.ThisAddIn才能够正常访问
  • 由于在一般情况下,是根本不会在主程序中去做业务操作的,所以以后所有基本操作的例子,我都会按照非主程序的访问方式给出:
using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using ExcelTools = Microsoft.Office.Tools;

// worksheet级别的操作:
Worksheet wst = ((Worksheet)Globals.ThisAddIn.Application.ActiveSheet);                     // 获取当前选中的Sheet页;
Worksheet wst2 = ((Worksheet)Globals.ThisAddIn.Application.Worksheets["考核情况"]);         // 根据名称获取Sheet页;

// 新建worksheet
Worksheet new_wst;
new_wst = (Worksheet)Globals.ThisAddIn.Application.Worksheets.Add();
new_wst.Name = "新建Sheet页";

int rowsCount = wst.UsedRange.Rows.Count;                                                   //获取已经使用的行
int colsCount = wst.UsedRange.Columns.Count;                                                //获取已经使用的列

var content = wst2.Range["A1"].Value;                                                       // 获取表中单元格内容
((Range)wst.Range["A8"]).Value = "111";                                                     // 写入单元格数据

((Range)wst2.Rows[2, Type.Missing]).Delete(XlDeleteShiftDirection.xlShiftToLeft);           // 删除某一行
((Range)wst2.Cells[1, 2]).EntireColumn.Delete(0);                                           // 删除某一列

// 取出这个表所有的列
// 如果不用UsedRange的话,就会获取到Excel包含空白的所有列
List<string> all_column = new List<string>();
foreach (Range all_col in wst2.UsedRange.Columns)
{
    all_column.Add(all_col.Value2[1, 1]);
}

// 获取当前Excel表的所有表名;
List<string> m_AllSheets = new List<string>();
foreach (var sheetlist in Globals.ThisAddIn.Application.Worksheets)
{
    m_AllSheets.Add(((Worksheet)sheetlist).Name);
}

Excel的扩展控件

微软为Excel提供了几个比较有用的扩展控件,能够帮助Excel完成更多的扩展功能,例如:

  • 为worksheet添加表格并绑定数据源
  • 为worksheet添加图表并绑定数据源
  • 等等,即如下图所示:

在这里插入图片描述

1、使用ObjectList扩展控件为Excel表格并绑定数据源

以上说明的所有操作都是对Excel中的每一个单一元素进行操作,但是,如果要是有一个数据源,需要和某一个Excel中的WorkSheet进行关联,这个就是ListObject的作用。ListObject控件支持简单和复杂的数据绑定,最简单的,比如:比如绑定一个内存中DataTable数据源

使用实例1:将一个DataTable绑定到ObjectList

在利用VSTO编程在Excel的WorkSheet中添加ListObject和在Excel中添加了一个表格是一样的,在Excel中的操作如下:

在这里插入图片描述

在VSTO利用代码开发,效果也是同样的:

using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using ExcelTools = Microsoft.Office.Tools;


string connectionString = "此处是连接数据库的字符串";

// 添加一个ListObject到WorkSheet;
ExcelTools.Excel.Worksheet worksheet = Globals.Factory.GetVstoObject(wst);
ExcelTools.Excel.ListObject list1;
Range cell = worksheet.Range["$A$1:$Z$9999"];
list1 = worksheet.Controls.AddListObject(cell, "list1");
list1.AutoSetDataBoundColumnHeaders = true;

// 通过OleDB查询;
using (OleDbConnection con = new OleDbConnection(connectionString))
{
    var dataTable = new System.Data.DataTable();
    string query = SQL_Generator.GenerateSQLByTemplate(column);
    con.Open();
    OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);

    adapter.Fill(dataTable);
    ds.Tables.Add(dataTable);
    con.Close();

    list1.SetDataBinding(dataTable, null, sheetnames);
}
使用实例2、使用Chart扩展控件为Excel添加图表

在这里插入图片描述

using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using ExcelTools = Microsoft.Office.Tools;


ExcelTools.Excel.Worksheet worksheet = Globals.Factory.GetVstoObject(
    Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet);


Range cells = worksheet.Range["A5", "D8"];
ExcelTools.Excel.Chart chart = worksheet.Controls.AddChart(cells, "employees");
chart.ChartType = XlChartType.xl3DPie;
chart.SetSourceData(cells);
Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值