[英]Bind DataTable to Excel spreadsheet directly in C#
我正在構建一個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" })
唯一的問題是持久性。 關閉電子表格之前,您將需要保存完整的數據表(除非您在ListObject中顯示整個數據表)。
當您重新打開工作表時,您將需要一個方法將表加載到內存數據表中,然后重新綁定它。
希望對您有所幫助!
有一些在線鏈接。 https://msdn.microsoft.com/zh-CN/library/cc668212.aspx
我唯一遇到的問題有時是更好地更新基礎數據表,而不是使用Excel工作表。 為此,您可以設置在對ListObject進行任何更改時觸發的事件。
沒有將DataTable
綁定到Excel電子表格的直接方法。
您必須枚舉DataTable
行和列,並將數據插入到工作表中。
然后,您必須決定何時進行更新(即在保存工作簿期間-然后為BeforeSave
事件創建事件處理程序),並枚舉工作表中的行和列,以將值移回DataTable
並更新數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.