概要
Excel 2002 引入了用扩展标记语言 (XML) 格式打开文件的功能。使用用户界面或代码可以在 Excel 2002 或 Excel 2003 中直接打开构造良好的 XML 文件。
在 Visual C# .NET 中,您可以利用 Excel 的 XML 功能向工作簿中无缝传输数据,从而以您选择的格式和排列方式呈现数据。本文演示如何完成此任务。
返回页首
从数据集生成在 Excel 2002 或 Excel 2003 中使用的 XML
本节说明如何创建 DataSet 对象,以及如何使用 WriteXML 方法将该对象包含的数据导出到 XML 文件中。生成的 XML 文件可以直接在 Excel 中打开。为便于说明,使用 Jet OLEDB 提供程序从 Microsoft Access Northwind 示例数据库创建了 DataSet 对象。但是,类似的代码可与您使用 Visual C# .NET 创建的任何 DataSet 对象一起使用。
启动 Microsoft Visual Studio .NET。在 文件 菜单上,单击 新建 ,然后单击 项目 。从 Visual C# 项目类型中选择 Windows 应用程序 。默认情况下创建 Form1。
在 视图 菜单上,选择 工具箱 以显示“工具箱”,然后向 Form1 中添加一个按钮。
双击 Button1 。将出现该窗体的代码窗口。
将下面的 using 指令添加到 Form1.cs 顶部:
using System.Data.OleDb; using System.Xml;
将下面的私有成员变量添加到 Form1 类中:
private string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + " C:\Program Files\Microsoft Office\Office10\Samples\" + "Northwind.mdb;";
注意 :您可能需要修改连接字符串中 Northwind.mdb 的路径,以便与您安装的位置相匹配。
在 button1_Click 处理程序中添加以下代码:
//Connect to the data source. OleDbConnection objConn = new OleDbConnection (strConn); try { objConn.Open(); //Fill a dataset with records from the Customers table. OleDbCommand objCmd = new OleDbCommand( "Select CustomerID, CompanyName, ContactName, " + "Country, Phone from Customers", objConn); OleDbDataAdapter objAdapter = new OleDbDataAdapter(); objAdapter.SelectCommand = objCmd; DataSet objDataset = new DataSet(); objAdapter.Fill(objDataset); //Create the FileStream to write with. System.IO.FileStream fs = new System.IO.FileStream( "C:\Customers.xml", System.IO.FileMode.Create); //Create an XmlTextWriter for the FileStream. System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter( fs, System.Text.Encoding.Unicode); //Add processing instructions to the beginning of the XML file, one //of which indicates a style sheet. xtw.WriteProcessingInstruction("xml", "version='1.0'"); //xtw.WriteProcessingInstruction("xml-stylesheet", // "type='text/xsl' href='customers.xsl'"); //Write the XML from the dataset to the file. objDataset.WriteXml(xtw); xtw.Close(); //Close the database connection. objConn.Close(); } catch (System.Exception ex) { MessageBox.Show(ex.Message); }
按 F5 键生成并运行程序。
单击 Button1 以创建 XML 文件,然后关闭 Form1 以结束该程序。
启动 Excel 2002 或 Excel 2003 并打开 C:\Customers.xml 输出文件。
在您看到已将 XML 分析成新工作簿中的行和列后,请关闭文件并退出 Excel。
返回页首
使用样式表格式化 XML
该步骤介绍如何使用样式表 (XSL) 来转换 XML 数据在 Excel 工作簿中的格式和排列方式。
- 使用任何 HTML 编辑器或文本编辑器(例如 Notepad.exe),将下面的 XSL 另存为 C:\Customers.xsl:
1<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <style> .HDR { background-color:bisque;font-weight:bold } </style> </head> <body> <table> <colgroup align="CENTER" width="100"></colgroup> <colgroup align="LEFT" width="200"></colgroup> <colgroup align="LEFT" width="200"></colgroup> <colgroup align="LEFT" width="100"></colgroup> <colgroup align="LEFT" width="100"></colgroup> <td class="HDR">Customer ID</td> <td class="HDR">Company</td> <td class="HDR">Contact</td> <td class="HDR">Country</td> <td class="HDR">Phone</td> <xsl:for-each select="NewDataSet/Table"> <tr> <td><xsl:value-of select="CustomerID"></xsl:value-of></td> <td><xsl:value-of select="CompanyName"></xsl:value-of></td> <td><xsl:value-of select="ContactName"></xsl:value-of></td> <td><xsl:value-of select="Country"></xsl:value-of></td> <td><xsl:value-of select="Phone"></xsl:value-of></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
在 button1_Click 处理程序中取消对以下代码行的注释:
xtw.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='customers.xsl'");
此行代码向 XML 文件写入了一个处理指令,Excel 使用该指令来查找样式表 (Customers.xsl)。
- 按 F5 键生成并运行程序。
- 单击 Button1 以创建 XML 文件,然后关闭 Form1 以结束该程序。
- 启动 Excel 2002 或 Excel 2003 并打开 C:\Customers.xml 输出文件。
- 因为从 Excel 可以看到 XML 中样式表的处理指令,所以您在打开文件时会收到一个对话框提示。在 导入 XML 对话框中,选择 打开该文件,应用以下样式表 。在列表中,选择 Customers.xsl 并单击 确定 。注意,XML 数据已格式化,并已经根据样式表排列各个列。
- 关闭该文件并退出 Excel。
返回页首
使用代码打开转换的 XML
此时,您已经使用 Excel 中的用户界面打开了 XML 文件。本节介绍如何以编程方式使 Excel 自动打开工作簿。下面的示例说明如何通过首先将 DataSet 对象中的 XML 转换成 HTML 来打开转换的 XML,而不需要用户干预。
添加对 Microsoft Excel 10.0 对象库或 Microsoft Excel 11.0 对象库 的引用。为此,请按照下列步骤操作: 1. 在 项目 菜单上,单击 添加引用 。 2. 在 COM 选项卡上,找到 Microsoft Excel 10.0 对象库或 Microsoft Excel 11.0 对象库 ,并单击 选择 。 3. 在 添加引用 对话框中单击 确定 以接受您的选择。如果提示您为选定的库生成包装,请单击 是 。
将下面的 using 指令添加到 Form1.cs 顶部:
using Excel = Microsoft.Office.Interop.Excel;
在 Visual C# .NET 项目中,向 Form1 中添加另一个按钮。
双击 Button2 。当窗体的代码窗口出现时,请将以下代码添加到 Button2_Click 处理程序中:
//Connect to the data source. OleDbConnection objConn = new OleDbConnection (strConn); objConn.Open(); //Fill a dataset with records from the Customers table. OleDbCommand objCmd = new OleDbCommand( "Select CustomerID, CompanyName, ContactName, " + "Country, Phone from Customers", objConn); OleDbDataAdapter objAdapter = new OleDbDataAdapter(); objAdapter.SelectCommand = objCmd; DataSet objDataset = new DataSet(); objAdapter.Fill(objDataset); //Create the FileStream to write with. System.IO.FileStream fs = new System.IO.FileStream( "C:\Customers.htm", System.IO.FileMode.Create); //Create an XmlTextWriter for the FileStream. System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter( fs, System.Text.Encoding.Unicode); //Transform the XML using the stylesheet. XmlDataDocument xmlDoc = new XmlDataDocument(objDataset); System.Xml.Xsl.XslTransform xslTran = new System.Xml.Xsl.XslTransform(); xslTran.Load("C:\Customers.xsl"); xslTran.Transform(xmlDoc, null, xtw); //Open the HTML file in Excel. Excel.Application oExcel = new Excel.Application(); oExcel.Visible=true; oExcel.UserControl=true; Excel.Workbooks oBooks = oExcel.Workbooks; object oOpt = System.Reflection.Missing.Value; //for optional arguments oBooks.Open("c:\customers.htm", oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt);
按 F5 键生成并运行程序。
单击 Button2 以在 Excel 中打开转换的 XML。