在Microsoft Office System中使用ADO.NET資料集(四)

來源:互聯網
上載者:User
ado|資料 在Office文檔中使用DataSet中的資料

一旦DataSet中填充完畢你所需要的資料,並且斷開了資料庫連接,你就有多種方法在各種Office文檔中使用這些資料。Microsoft Office System本質上不能處理大多數基於.NET的對象,因此,通常你必須使用COM互用性(COM interoperability)來維護這些資料,並將這些資料轉換為你希望添入的工作表或其他文檔所能識別的資料類型。你可以在Microsoft Office System使用它新整合的XML功能來達到這種與.NET對象的綜合應用。

將資料插入工作表

你可能使用過VBA,那麼你可以採用你在VBA中使用的那些技術相類似的方式使用VB.NET自動建立一個新的工作表。當然,如果你熟悉從外部應用程式自動建立工作表的技術,那麼你完全可以使用與之完全相同的技術來自動建立一個工作表——比如那些使用Microsoft Visual Basic 6編寫的代碼。然後,你需要將DataSet中的內容插入到工作表中。

一個Windows表單可以使用定製的BuildWorksheet方法開啟Microsoft Office Excel 2003,添加一個活頁簿,並使用適當的資料建立一個工作表。圖2顯示了這個結果。不幸的是,在Excel中沒有一個屬性你可以指派DataSet的引用給它——DataGrid視窗和Web表單控制項就有這種屬性。因此,你必須編寫一些代碼來完成這個任務。



圖2 已經用DataSet中的資料填充了的Excel 2003工作表

Microsoft Office System通過COM對象公布各個對象。因此微軟發布了一套Primary Interop Assemblies (主要 Interop 組件,PIAs),它專門針對.NET對象訪問COM對象進行了最佳化。你必須在每台客戶機上安裝PIAs,而實際上,當安裝Microsoft Office System時就安裝了它們。

當安裝Microsoft Office System時,在安裝嚮導中選擇使用者自訂選項,如下面的圖3所示,你可以選擇或清除那些功能。其中的“支援.NET編程”選項就是指安裝PIAs。你必須為每個你計劃與之自動互操作的.NET相容的應用程式安裝PIAs,並且你既可以將PIAs安裝到全域組件快取(GAC)中,也可以將PIAs放置在你的專案檔夾。你可以從下面的文章中找到其它更詳細的資訊: How to: Install Office Primary Interop Assemblies.



圖3 使用嚮導安裝PIAs

當在基於.NET的應用程式中使用Excel 2003 PIAs,需要在Visual Studio .NET 的“添加引用”對話方塊中添加對它們的引用,如圖4所示。一旦尼添加了這個引用,你就可以象維護.NET程式集一樣維護Excel COM對象。



圖4 使用“添加引用”對話方塊添加對Excel 2003 PIAs的引用

在這個ADONET.vb Windows 表單中BuildWorksheet被定義成一個私用程序,它有且只有一個DataSet參數。因為它實際上僅僅處理一個DataTable對象(儲存客戶資料),代碼在開頭處聲明了一個名為dt的DataTable變數,用以儲存對該表的引用。

Private Sub BuildWorksheet(ByVal ds As DataSet)

Dim dt As DataTable

為了維護Excel活頁簿,需要執行個體化一個Excel應用程式物件,然後使用該物件模型添加一個新的活頁簿,並更改活頁簿的名字(例子中採用的是Northwind Customers),同時執行了其它UI方面的任務。

'Create an instance of Excel 2003, add a workbook,

'and let the user know what's happening

Dim xl As New Excel.Application

xl.Workbooks.Add()

xl.ActiveSheet.Name = "Northwind Customers"

xl.Visible = True

xl.Range("A1").Value = "Loading the DataSet...."

一旦載入並運行Excel,這段代碼需要引用DataSet ds中的相應表(DataTable對象)。然後它遍曆DataTable對象的列集合,將各個欄位名寫到工作表的首行。該樣本使用Customers表和Customers欄位標題。

Try

xl.ScreenUpdating = False



'Start with the Customers table

dt = ds.Tables("Customers")



'Add the column headings for the Customers

Dim dc As DataColumn

Dim iCols As Int32 = 0

For Each dc In dt.Columns

xl.Range("A1").Offset(0, iCols).Value = dc.ColumnName

iCols += 1

Next

所有剩下的工作就是遍曆表的所有行,使用DataRow對象的ItemArray屬性來將每個資料行的內容寫到工作表的一行中。這大約是Excel將要直接支援DataSet對象最顯著的徵兆。

'Add the data

Dim iRows As Int32

For iRows = 0 To dt.Rows.Count - 1

xl.Range("A2").Offset(iRows).Resize(1, iCols).Value = _

dt.Rows(iRows).ItemArray()

Next

Catch ex As Exception

這個過程中其餘的代碼更新UI,並對工作表應用內建的格式化。

Finally

xl.ScreenUpdating = True

End Try



'Make the sheet pretty

With xl.ActiveSheet.Range("A1")

.AutoFilter()

.AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormatSimple)

End With



xl = Nothing

End Sub

儘管Microsoft Office System本質上不支援.NET對象,但是DataSet的物件模型和功能使得將其結合到Microsoft Office System中,實現資料互動任務非常簡單。

注意: 你可以放心使用這個技術,而不用擔心DataSet來自何處,它甚至可以來自於.NET組件或Web服務。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。