如何使用 Visual C# 向 Microsoft Excel 2002 传输 XML 数据
如何使用 Visual C# 向 Microsoft Excel 2002 传输 XML 数据
察看本文应用于的产品
文章编号
:
307029
最后修改
:
2006年2月20日
修订
:
7.0
本文的发布号曾为 CHS307029
有关本文的 Microsoft Visual Basic .NET 版本,请参阅 307021
(http://support.microsoft.com/kb/307021/)。
本页
概要
从数据集生成在 Excel 2002 或 Excel 2003 中使用的 XML
使用样式表格式化 XML
使用代码打开转换的 XML
参考
| 文章编号 | : | 307029 |
| 最后修改 | : | 2006年2月20日 |
| 修订 | : | 7.0 |
(http://support.microsoft.com/kb/307021/)。
本页
概要
从数据集生成在 Excel 2002 或 Excel 2003 中使用的 XML
使用样式表格式化 XML
使用代码打开转换的 XML
参考
概要
Excel 2003 中直接打开构造良好的 XML 文件。
使用 Microsoft Visual C# 2005 或 Microsoft
Visual C# .NET,您可以利用 Excel 的 XML 功能向工作簿中无缝传输数据,从而以您选择的格式和排列方式呈现数据。本文演示如何完成此任务。
![]() |
回到顶端 |
从数据集生成在 Excel 2002 或 Excel 2003 中使用的 XML
本节说明如何创建 DataSet 对象,以及如何使用 WriteXML 方法将该对象包含的数据导出到 XML 文件中。生成的 XML
文件可以直接在 Excel 中打开。为便于说明,使用 Jet OLEDB 提供程序从 Microsoft Access 罗斯文示例数据库创建了
DataSet 对象。但是,类似的代码可与您使用 Visual C# 2005 或 Visual C# .NET 创建的任何
DataSet 对象一起使用。
| 1. | 启动 Microsoft Visual Studio 2005 或 Microsoft Visual Studio .NET。在文件菜单上,单击新建,然后单击项目。从 Visual C# 项目类型中选择 Windows 应用程序。默认情况下创建 Form1。 |
| 2. | 在视图菜单上,选择工具箱以显示“工具箱”,然后向 Form1 中添加一个按钮。 |
| 3. | 双击 Button1。将出现该窗体的代码窗口。 |
| 4. | 将下面的 using 指令添加到 Form1.cs 顶部:
using System.Data.OleDb; using System.Xml; |
| 5. | 将下面的私有成员变量添加到 Form1 类中:
private string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + " C:\\Program Files\\Microsoft Office\\Office10\\Samples\\" + "Northwind.mdb;"; 注意:您可能需要修改连接字符串中 Northwind.mdb |
| 6. | 在 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);
}
注意:您必须在 Visual Studio 2005 中更改此代码。默认情况下,当您创建 Windows 有关 Visual C# 2005 中 Windows http://msdn2.microsoft.com/zh-cn/library/ms173077.aspx
(http://msdn2.microsoft.com/zh-cn/library/ms173077.aspx) |
| 7. | 按 F5 生成并运行程序。 |
| 8. | 单击 Button1 以创建 XML 文件,然后关闭 Form1 以结束该程序。 |
| 9. | 启动 Excel 2002 或 Excel 2003 并打开 C:\Customers.xml 输出文件。 |
| 10. | 在您看到已将 XML 分析成新工作簿中的行和列后,请关闭文件并退出 Excel。 |
![]() |
回到顶端 |
使用样式表格式化 XML
该步骤介绍如何使用样式表 (XSL) 来转换 XML 数据在 Excel 工作簿中的格式和排列方式。
| 1. | 使用任何 HTML 编辑器或文本编辑器(例如 Notepad.exe),将下面的 XSL 另存为 C:\Customers.xsl: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<HTML>
<HEAD>
<STYLE>
.HDR { background-color:bisque;font-weight:bold }
</STYLE>
</HEAD>
<BODY>
<TABLE>
<COLGROUP WIDTH="100" ALIGN="CENTER"></COLGROUP>
<COLGROUP WIDTH="200" ALIGN="LEFT"></COLGROUP>
<COLGROUP WIDTH="200" ALIGN="LEFT"></COLGROUP>
<COLGROUP WIDTH="100" ALIGN="LEFT"></COLGROUP>
<COLGROUP WIDTH="100" ALIGN="LEFT"></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"/></TD>
<TD><xsl:value-of select="CompanyName"/></TD>
<TD><xsl:value-of select="ContactName"/></TD>
<TD><xsl:value-of select="Country"/></TD>
<TD><xsl:value-of select="Phone"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
|
| 2. | 在 button1_Click 处理程序中取消对以下代码行的注释:
xtw.WriteProcessingInstruction("xml-stylesheet",
"type='text/xsl' href='customers.xsl'");
此行代码向 XML 文件写入了一个处理指令,Excel 使用该指令来查找样式表 |
| 3. | 按 F5 生成并运行程序。 |
| 4. | 单击 Button1 以创建 XML 文件,然后关闭 Form1 以结束该程序。 |
| 5. | 启动 Excel 2002 或 Excel 2003 并打开 C:\Customers.xml 输出文件。 |
| 6. | 因为从 Excel 可以看到 XML 中样式表的处理指令,所以您在打开文件时会收到一个对话框提示。在导入 XML 对话框中,选择打开该文件,应用以下样式表。在列表中,选择 Customers.xsl 并单击 确定。注意,XML 数据已格式化,并已经根据样式表排列各个列。 |
| 7. | 关闭该文件并退出 Excel。 |
![]() |
回到顶端 |
使用代码打开转换的 XML
此时,您已经使用 Excel 中的用户界面打开了 XML 文件。本节介绍如何以编程方式使 Excel 自动打开工作簿。下面的示例说明如何通过首先将
DataSet 对象中的 XML 转换成 HTML 来打开转换的 XML,而不需要用户干预。
对象库的引用。为此,请按照下列步骤操作:
| a. | 在项目菜单上,单击添加引用。 |
| b. | 在 COM 选项卡上,找到 Microsoft Excel 10.0 对象库或 Microsoft Excel 11.0 对象库,并单击选择。 |
| c. | 在添加引用对话框中单击确定以接受您的选择。如果提示您为选定的库生成包装,请单击是。 |
| 2. | 将下面的 using 指令添加到 Form1.cs 顶部:
using Excel = Microsoft.Office.Interop.Excel; |
| 3. | 在 Visual C# 2005 或 Visual C# .NET 项目中,向 Form1 中添加另一个按钮。 |
| 4. | 双击 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);
|
| 5. | 按 F5 生成并运行程序。 |
| 6. | 单击 Button2 以在 Excel 中打开转换的 XML。 |
注意:尽管 Excel 2002 和 Excel 2003 对象模型确实公开了一种
OpenXML 方法(使用该方法,您可以通过编程方式打开应用样式表的 XML
文件),但前面的示例未调用此方法,原因在于从自动化客户端使用此方法存在一个已知问题。从 Excel 宏调用 OpenXML
方法时,该方法会以预期方式运行;但是,从自动化客户端调用此方法时,则会忽略此 StyleSheet 参数。
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2002 时,OpenXML 方法的样式表参数被忽略
![]() |
回到顶端 |
参考
Excel 2002 和 XML
Visual C# .NET 中实现 Microsoft Excel 自动化
.NET 从数据库填充 DataSet 对象
2005 或 Visual C# .NET 向 Excel 工作簿传输数据

