在Microsoft Office System中使用ADO.NET数据集(四)

类别:.NET开发 点击:0 评论:0 推荐:

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 (主互操作程序集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对象(存储客户数据),代码在开头处声明了一个名为dtDataTable变量,用以保存对该表的引用。

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服务。

 

本文地址:http://com.8s8s.com/it/it44832.htm