在Microsoft Office中使用ADO.NET 7
点击次数:15 次 发布日期:2008-11-26 10:41:44 作者:源代码网
|
源代码网推荐 我曾说过步骤 1 很容易;步骤 3 则更加容易。现在我们已将 ADO.NET 数据集分析到数组中,可以利用它在 Office 中进行任何操作。以下代码是对我们一直在使用的示例的扩展。它从 XML Web Service 中检索 XML 并对其进行分析,然后将其插入 Excel 的当前电子表格中: 源代码网推荐 源代码网推荐 Dim rngData As Range 源代码网推荐 Dim sc As MSSOAPLib30.SoapClient30 源代码网推荐 Dim xdl As MSXML2.IXMLDOMNodeList 源代码网推荐 Dim vDataSet As Variant 源代码网推荐 " 运行 XML Web Service 并将响应分析到数组中。 源代码网推荐 Set sc = New MSSOAPLib30.SoapClient30 源代码网推荐 sc.MSSoapInit "http://services.fabrikam.com/OWSISample/Order.asmx?wsdl" 源代码网推荐 Set xdl = sc.OpenOrders 源代码网推荐 vDataSet = ParseDataSet(xdl, "Table", True) 源代码网推荐 源代码网推荐 " 将数组作为格式化的网格插入。 源代码网推荐 Set rngData = ActiveCell.Resize(UBound(vDataSet, 1) + 1, UBound(vDataSet, 2) + 1) 源代码网推荐 rngData = vDataSet 源代码网推荐 ActiveCell.AutoFilter 源代码网推荐 Selection.AutoFormat Format:=xlRangeAutoFormatList2, Alignment:=True 源代码网推荐 源代码网推荐 源代码网推荐 这是 Excel 最吸引我的原因之一。您可以将已为同样大小的数组分配的 Range 对象直接分配到电子表格中。请注意 rngData = vDataSet 一行。就是这么简单!为达到这个目的,我利用 AutoFilter 功能进行了一些改进以使它看起来更好,这样用户便可以深化数据并对数据应用自动格式。图 4 显示了结果。请将此结果与图 2 中 Web 查询所获得的结果进行比较。 源代码网推荐 源代码网推荐
源代码网推荐 图 4:通过自定义 VBA 代码插入到 Excel 中的 XML Web Service 数据。 源代码网推荐 源代码网推荐 在 Word 中达到同样目的会稍微复杂一点,因为 Word 中没有可以将数组插入文档的装置。同时,遍历数组的功能也尚未完善。以下代码可以在 Word 中完成与在 Excel 中执行的相同任务: 源代码网推荐 源代码网推荐 Private Sub InsertArrayAsWordTable() 源代码网推荐 源代码网推荐 Dim sc As MSSOAPLib30.SoapClient30 源代码网推荐 Dim xdl As MSXML2.IXMLDOMNodeList 源代码网推荐 Dim vDataSet As Variant 源代码网推荐 Dim nRows As Integer 源代码网推荐 Dim nRowCount As Integer 源代码网推荐 Dim nColumns As Integer 源代码网推荐 Dim nColumnCount As Integer 源代码网推荐 Dim sRow As String 源代码网推荐 源代码网推荐 " 运行 XML Web Service 并将响应分析到数组中。 源代码网推荐 Set sc = New MSSOAPLib30.SoapClient30 源代码网推荐 sc.MSSoapInit "http://services.fabrikam.com/OWSISample/Order.asmx?wsdl" 源代码网推荐 Set xdl = sc.OpenOrders 源代码网推荐 vDataSet = ParseDataSet(xdl, "Table", True) 源代码网推荐 源代码网推荐 " 将数组作为格式化的表格插入。 源代码网推荐 nRows = UBound(vDataSet, 1) 源代码网推荐 nColumns = UBound(vDataSet, 2) 源代码网推荐 源代码网推荐 Selection.Collapse wdCollapseStart 源代码网推荐 源代码网推荐 Options.Pagination = False 源代码网推荐 For nRowCount = 1 To nRows 源代码网推荐 For nColumnCount = 1 To nColumns 源代码网推荐 sRow = sRow & vDataSet(nRowCount - 1, nColumnCount - 1) 源代码网推荐 If nColumns <> nColumnCount Then 源代码网推荐 sRow = sRow & vbTab 源代码网推荐 End If 源代码网推荐 Next 源代码网推荐 sRow = sRow & vbCrLf 源代码网推荐 Next 源代码网推荐 源代码网推荐 With Selection 源代码网推荐 .InsertAfter sRow 源代码网推荐 .ConvertToTable Separator:=vbTab 源代码网推荐 With .Tables(1) 源代码网推荐 .AutoFitBehavior (wdAutoFitContent) 源代码网推荐 .AutoFormat Format:=wdTableFormatList2 源代码网推荐 End With 源代码网推荐 .Collapse wdCollapseStart 源代码网推荐 End With 源代码网推荐 Options.Pagination = True 源代码网推荐 源代码网推荐 End Sub 源代码网推荐 源代码网推荐 InsertArrayAsWordTable 函数可以检索 XML Web Service 数据并对其进行分析,然后循环读取数组,以将文本作为制表符分隔字符串插入 Word。最后,使用 ConvertToTable 方法将字符串转换为表格。就象使用 Excel 一样,我们需要应用少量格式来改进其显示形式。图 5 显示了结果。 源代码网推荐 源代码网推荐
源代码网推荐 图 5:通过自定义 VBA 代码插入到 Word 中的 XML Web Service 数据。 源代码网推荐 源代码网推荐 小结 源代码网推荐 我所介绍的解决方案非常简单,并可以有效地在 Microsoft Office 中顺利显示 ADO.net 数据集。因此,用户就可以随心所欲地使用数据。 源代码网推荐 源代码网推荐 最后要注意的是,不要向客户端返回过多数据。我们发现,XML Web Service 通常很少会返回上百条记录,这些记录可以被迅速分析并插入 Microsoft Office。但是,当返回上千条记录时,性能会受到影响。您肯定会想到通过线路传输大量数据时就会发生这种情况。Microsoft Office 处理数据所需的处理时间是容易忽视的问题,也是 Microsoft Office 文档的实际局限性。例如,Microsoft Excel 的每张工作表中可以包含 65,000 行。我们确实曾经看到过用户想向工作表中返回更多数据的情况。这使我们想起一句著名的格言:我们永远不需要超过 640 KB 的 RAM。谁又曾想到我们可能会在工作表中需要超过 65,000 行呢?我肯定不会! 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
