将DataTable直接绑定到Excel电子表格中
我正在构build一个C#VSTO加载项,并寻找将System.Data.DataTable直接绑定到Excel电子表格(如绑定数据源)的方法,并在电子表格中跟踪用户修改过的单元格,并以C#读取更改。
感谢帮助。
你可能想看看使用ListObjects。 您可以直接将内存中的数据绑定到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" })
唯一的问题是持久性。 在closures电子表格之前,您将需要保存完整的数据表(除非在ListObject中显示整个数据表)。
当您重新打开工作表时,您需要一个方法将表加载到内存数据表中,然后重新绑定它。
我希望有帮助!
网上有几个链接。 https://msdn.microsoft.com/en-us/library/cc668212.aspx
我遇到的唯一问题是有时更新底层数据表,而不是使用Excel工作表。 要做到这一点,你可以设置事件,触发对ListObject的任何更改。
没有直接的方法将DataTable
绑定到Excel电子表格。
您必须枚举DataTable
行和列,并将数据插入到Worksheet中。
然后,您必须决定何时更新(即在保存工作簿期间,然后为BeforeSave
事件创build事件处理程序),并在Worksheet中BeforeSave
举行和列,将值移回DataTable
并更新数据库。