软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

在Microsoft Office中使用ADO.NET
发布于:第八基地 来源:互联网 作者:天堂路上 时间:2016-04-27 点击:354
不要做无谓的重复

在本文开始,我曾提到过MicrosoftOffice没有提供可以使用XML序列化数据集的现成解决方案。但是,MicrosoftExcel确实提供了一个与此非常相似的功能。从创建MicrosoftOffice解决方案时所积累的经验中,您应该明白一件事情,那就是不要做无谓的重复。作为程序员,我们都有一种倾向:为要做的每一件事情编写代码。在使用MicrosoftOffice时,重要的是要学会问自己一个简单的问题,“有没有可以利用的内置功能,使我不用编写代码就可以更迅速地达到我的目的?”对于我们试图解决的问题,MicrosoftExcel提供了一个我们可以利用的功能,称为Web查询。Web查询有其局限性,但是在处理XMLWebService的很多情况下都非常有用,并且在我看来,它是经常被忽略的一种重要功能。我们来快速回顾一下MicrosoftExcelWeb查询功能的优点和缺点。

在本文后半部分中,我们将利用可以公开使用的Web服务。请花几分钟的时间用您的浏览器运行一下该XMLWebService。它会为Fabrikam.com(Fabrikam.com是建立在MicrosoftOffice之上的示例应用程序;返回对当前打开的订单的查询。您在浏览器中看到的XML是序列化数据集,形式类似于以前SQLServer罗斯文数据库中的数据集。

让我们在MicrosoftExcelWeb查询中运用这种Web服务。要进行此操作,请执行以下步骤:启动MicrosoftExcel。在“数据”菜单上,指向“导入外部数据”并单击“新建Web查询”。显示“新建Web查询”对话框。在“地址”列表中,键入http://services.fabrikam.com/OWSISample/Order.asmx/OpenOrders并单击“转到”。图1显示了您将看到的内容。
图1:预览FabrikamOpenOrdersXMLWebService的“新建Web查询”对话框。

单击“导入”。然后系统会询问您在何处插入Web查询数据。在空白工作表上选择任一单元格,然后单击“确定”。Web查询将运行并插入结果,如图2所示。图2:插入工作表中的Web查询结果。

正如您所看到的,我们无需任何代码便可轻松地将XMLWebService的结果导入Excel。我已经多次使用过这种方法,发现它是一种相当可靠的技术。Excel中的Web查询技术出奇地灵活;要了解可用的配置选项,请参见图3。我比较喜欢的功能是它能够基于某些参数更新单元格。例如,您可以让Web查询按照您指定的时间间隔(分钟)或在首次打开工作簿时自我更新。这样可以确保您总能具备最新的信息。

图3:“Web查询属性”对话框。

但是,Web查询也有一些缺点。首先,您可能会注意到Excel中的列标题不是很明确。Excel配有内置的XML转换器,专门用于导入任意XML并将其转换为电子表格。Excel采用的方法可以通用,因为它没有关于所加载XML的结构和用途的任何线索。在我们的例子中,我们所使用的XML不是任意的;其格式或架构都是大家所熟悉的。这意味着,我们使用基于通用布局的Web查询时,XML的所有格式和其他元素在Excel中对于我们来说都是有用的。

此外,Excel目前无法处理XSD数据类型。因此,当我们运行Web查询时,很多数据类型都无法按照我们所希望的方式被转换或处理。例如在图2中,您可以注意到数据栏中包含类似2002-07-19T10:53:36.000000004:00的数据。XSD以ISO8601数据格式显示数据。正如您所看到的,Excel无法识别此数据格式,并将其作为字符串来处理。

最后,对于能够处理XML的Web查询来说,其最大的缺陷便是仅在MicrosoftExcel2002中可用。因此,可以消除这些局限性并可以在任意MicrosoftOffice应用程序中使用的技术将是非常有用的。在我讲述如何通过VBA代码做到这一点之前,请采纳我的建议:如果您还不了解Web查询,最好先花一点时间来进一步了解它。对于无需编写代码就可以使用XMLWebService来说,Web查询的确很有帮助。有关Web查询的详细信息,请参阅CharlesMaxson的文章“Well-keptSecret:Excel'sWebQueriesEnableYoutoPopulateWorksheetsfromWebSites”。

下一篇:没有了
对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈