我正在构建一个C#VSTO加载项,并寻找将System.Data.DataTable直接绑定到Excel电子表格(如绑定数据源)并跟踪电子表格中用户修改过的单元格并在C#中读取更改的方法。
感谢您的帮助。
答案 0 :(得分:2)
您可能希望查看使用ListObjects。您可以直接将内存数据表绑定到ListObject。将此listobject(表)添加到工作表时,不必显示所有字段。
例如:
Public WithEvents decideList As Microsoft.Office.Tools.Excel.ListObject
Public dt As System.Data.DataTable = New System.Data.DataTable("MasterData")
' Load data into the datatable dt
Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(sheet) 'where sheet is the native worksheet where you are locating the ListObject
Dim cell As Excel.Range = worksheet.Range("$A$1:$D$4")
decideList = worksheet.Controls.AddListObject(cell, "decideList")
decideList.AutoSetDataBoundColumnHeaders = True
decideList.SetDataBinding(dt, Nothing, { "FirstName", "LastName", "Company" })
唯一的问题是持久性。在关闭电子表格之前,您需要保存完整的数据表(除非您在ListObject中显示整个数据表)。
当您重新打开工作表时,您需要一种方法将表加载到内存数据表中,然后重新绑定它。
我希望有所帮助!
网上有几个链接。 https://msdn.microsoft.com/en-us/library/cc668212.aspx
我遇到的唯一问题是更新基础数据表而不是使用Excel工作表。为此,您可以设置触发ListObject的任何更改的事件。
答案 1 :(得分:0)
没有直接方法将DataTable
绑定到Excel电子表格。
您必须枚举DataTable
中的行和列,并将数据插入工作表。
然后你必须决定何时更新(即在保存工作簿期间 - 然后为BeforeSave
事件创建事件处理程序)并枚举Worksheet中的行和列,将值移回DataTable
并更新数据库。