将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并更新数据库。

Interesting Posts