直接在C#中将DataTable绑定到Excel电子表格

时间:2017-06-06 00:13:47

标签: c# excel data-binding datatable

我正在构建一个C#VSTO加载项,并寻找将System.Data.DataTable直接绑定到Excel电子表格(如绑定数据源)并跟踪电子表格中用户修改过的单元格并在C#中读取更改的方法。

感谢您的帮助。

2 个答案:

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