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

來源:互聯網
上載者:User
ado|資料 將DataSet作為XML匯入到Excel工作表

Microsoft Office Excel 2003為XML提供了非常強大的支援,它允許你將活頁簿儲存為XML或者將XML資料來源匯入到活頁簿。由於DataSet天生就序列化為XML,所以你可以非常容易的將它的資料匯入到Excel中。匯入步驟需要XML架構,這樣Excel才能夠將資料對應到活頁簿的適當儲存格,而DataSet自動提供了這個功能。事實上,這就是本文前面描述的GetDataSet方法的結尾處所添加的代碼的功能,這些代碼將DataSet對象的資料和架構寫到磁碟上。

If bSaveSchema Then

'Places the file in this app's bin directory

ds.WriteXmlSchema("Customers.xsd")

ds.WriteXml("Customers.xml")

End If

這段代碼在應用程式的bin檔案夾建立XML和架構檔案。圖5顯示XML檔案的結果。



圖5:使用DataSet的WriteXml方法產生的Customers.xml檔案

圖6顯示XML架構,也是在Internet Explorer顯示。



圖6:使用DataSet的WriteXmlSchema方法產生的Customers. xsd檔案

這項技術也可以用在Excel中的一個新特性上,這個對象叫做ListObject,它是一個列表結構的新類型,本質上它提供資料的完整視圖。結果清單顯示在圖7中。你可以單擊標題列的下拉式清單對整個列表資料進行篩選和排序。圖中的XML源面板顯示了該資料的架構,你可以通過修改該架構來決定列表中可以包含那些資料。



圖7 使用XML架構映射以編程方式匯入XML

BuildXMLMap子過程執行與BuildWorksheet相似的功能,但是它使用XML匯入和映射來將資料從DataSet移動到Excel中。該過程接收一個DataSet作為其唯一參數,然後執行個體化Excel、添加一個活頁簿,同事執行其他UI(使用者介面)任務。例子中的活頁簿名為Northwind Customers。當然,你可以將它替換為你自己的活頁簿的名字。

Private Sub BuildXMLMap(ByVal ds As DataSet)

'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...."

該過程直接從DataSet對象載入XML資料,但是沒有任何方法可以直接從記憶體中讀取其架構。因此這段代碼使用.NET Framework Path 對象的GetFullPath方法為.XSD架構檔案擷取了一個完整路徑和檔案名稱。

Try

Dim sMap As String = System.IO.Path.GetFullPath("Customers.xsd")

然後,代碼添加XML映射架構到當前活動活頁簿的XmlMaps集合。Add方法的第一個參數是將要被映射的檔案的位置,第二個參數是儲存於集合中的這個映射的名字。代碼設定了該映射的名字,以便在後面引用這個映射。

'Add the map to the active workbook

'You can only add a map from a disk file.

xl.ActiveWorkbook.XmlMaps.Add(sMap, _

"NorthwindCustomerOrders").Name _

= "NorthwindCustomerOrders_Map"

代碼得到這個建立的XML映射的引用,將它儲存為映射變數,然後添加一個ListObject到當前使用中工作表。你所選擇的列表面板列,本樣本中是列A到J,包括標題列下面的許多行都是用來容納資料的。

'Specify the cells where the mapped data should go upon import

Dim map As Excel.XmlMap = _

xl.ActiveWorkbook.XmlMaps("NorthwindCustomerOrders_Map")

xl.Range("A1", "J1").Select()

Dim list As Excel.ListObject = _

CType(xl.ActiveSheet, Excel.Worksheet).ListObjects.Add

下一步是映射XML資料的特定元素到列表的每個列。SetValue方法持有所使用的映射的引用,並使用一個XPath運算式來指示哪些元素儲存在哪一列。下面的代碼設定列A容納CustomerID元素,然後設定該欄位標題為“Customer ID”。你可以設定以相同方式設定其他列的內容和標題。

list.ListColumns(1).XPath.SetValue(map, _

"/NorthwindCustomerOrders/Customers/CustomerID")

xl.Range("A1").Value = "Customer ID"

現在要設定ListObject的結構,因為下一步將匯入XML資料。Import方法讀取磁碟檔案,並且這裡使用ImportXml方法直接從DataSet 的GetXml方法中讀取XML,並未將XML資料儲存到磁碟上。該過程在最後開啟“XML源”工作面板,方便你查看。

'Import the XML data

xl.ActiveWorkbook.XmlMaps("NorthwindCustomerOrders_Map"). _

ImportXml(ds.GetXml)



'Open the XML Source Task Pane

xl.DisplayXMLSourcePane(map)



Catch ex As Exception



End Try



End Sub




相關文章

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。