如何在C#中使用VSTO将类列表绑定到Excel工作表?
C# VSTO 类列表绑定到Excel工作表实现方案
前置依赖
你已经完成VS2019 VSTO开发组件安装,无需额外依赖包。
步骤1:定义数据类(示例)
以商品数据类为例,你可以替换为自己的业务类:
public class Product { public int 商品ID { get; set; } public string 商品名称 { get; set; } public decimal 售价 { get; set; } public int 库存数量 { get; set; } }
步骤2:单向绑定实现(写入数据到Excel,性能最优)
该方案适合仅需要导出类列表到Excel的场景,数据量大时远快于逐单元格赋值
- 引入必要命名空间
using Microsoft.Office.Interop.Excel; using System.Reflection; using System.Collections.Generic;
- 核心实现代码
// 1. 拿到你的类列表实例,替换为你自己的数据源获取逻辑 List<Product> dataList = GetYourDataSource(); // 2. 获取目标工作表 Worksheet targetSheet = Globals.ThisAddIn.Application.ActiveSheet as Worksheet; // 文档级VSTO项目可直接用预设的工作表实例:Worksheet targetSheet = Globals.Sheet1; // 3. 生成写入用二维数组 PropertyInfo[] props = typeof(Product).GetProperties(); int rowNum = dataList.Count + 1; // 加1行存表头 int colNum = props.Length; object[,] writeArr = new object[rowNum, colNum]; // 填充表头 for (int i = 0; i < colNum; i++) { writeArr[0, i] = props[i].Name; } // 填充数据 for (int i = 1; i < rowNum; i++) { var currentItem = dataList[i - 1]; for (int j = 0; j < colNum; j++) { writeArr[i, j] = props[j].GetValue(currentItem); } } // 4. 一次性写入Excel Range targetRange = targetSheet.Range[targetSheet.Cells[1, 1], targetSheet.Cells[rowNum, colNum]]; targetRange.Value = writeArr; // 可选:自动适配列宽 targetRange.EntireColumn.AutoFit();
步骤3:双向绑定实现(修改Excel同步更新类列表)
如果需要Excel和类列表双向同步,使用VSTO提供的ListObject控件即可:
- 新增命名空间引用
using Microsoft.Office.Tools.Excel;
- 绑定代码
// 应用级VSTO项目需要先把互操作工作表转成宿主工作表 Worksheet vstoSheet = Globals.Factory.GetVstoObject(targetSheet); // 文档级项目可跳过上面这步,直接用预设的工作表实例 // 创建ListObject控件 ListObject bindList = vstoSheet.Controls.AddListObject(targetRange, "BindDataSource"); // 绑定类列表 bindList.SetDataBinding(dataList);
注意:双向绑定需要你的数据类实现INotifyPropertyChanged接口,才能实现类属性变更自动同步到Excel
内容的提问来源于stack exchange,提问作者Harini Muralidharan
相关产品推荐
相关产品推荐

