zoukankan      html  css  js  c++  java
  • 在Visual C# .Net 中怎样向Microsoft Excel 2002 传输XML数据[译]

    英文链接:How To Transfer XML Data to Microsoft Excel 2002 by Using Visual C# .NET 

    目录:

     

    摘要

    通过Excel 2002 Excel 2003从数据集DataSet中生成XML数据

    用样式表Stylesheet格式化XML数据

    编程打开格式后的XML数据

     

    摘要

     

    Excel 2002提供了以XML格式打开文件的功能。一个格式合法的XML文件可以通过用户界面和代码直接在Excel 2002Excel 2003中直接打开。

     

    通过Visual C#.Net,你可以使用ExcelXML功能将数据传输到工作薄中,并以用户选择的格式和布局显示。本文将演示这些功能的实现。

     

    通过Excel 2002 Excel 2003从数据集DataSet中生成XML数据

     

    本节描述怎样创建DataSet对象,并通过WriteXml方法将数据传输到XML文件中。可以通过在Excel中直接打开的方式形成XML文件。为了更好的阐述,我们通过Jet OLEDB Provider连接Access中的Northwind样例数据库赖创建DataSet对象。当然,这与通过C#来创建任意DataSet对象的工作方式是相似的。

     

    1、  启动Visual Studio .Net。点击“文件”菜单,选择“新建”中的“项目”选项。从项目类型中选择“Windows应用程序”,默认将创建Form1对象。

    2、  在“查看”菜单,选择“工具箱”以显示工具箱,并添加一个button到窗体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;";

    注意:你应该修改在connectionNorthwind.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);

             }

    7、  F5编译并运行程序。

    8、  单击Button1以创建XML文件,关闭窗体结束程序。

    9、  启动Excel 2002Excel 2003,打开上一步创建的Customers.xml文件。

    10、你可以看到XML文件已经被解析为新工作薄中的行和列,关闭文件退出Excel

     

    用样式表Stylesheet格式化XML数据

     

    接下来将演示怎样通过XSL(样式表stylesheet)格式化XML数据使其符合Excel工作薄。

    1、  HTML编辑器或文本编辑器(如记事本),编辑如下的XSL并保存到C:\Customer.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'");

    这一行代码为Excel提供了处理向导(a processing instuction),将XML文件定位到样式表文件Customer.xsl上。

    3、  F5编译并运行程序。

    4、  单击Button1创建XML文件,关闭Form1结束程序。

    5、  启动Excel 2002Excel 2003,打开上一步创建的Customers.xml文件。

    6、  因为Excel检测到XML数据中有对样式表的处理向导,所以当你打开文件时会弹出一个对话框。在“(导入XML)Import XML”对话框中,选择“打开下列样式表文件(Open the file with the following stylesheet applied”。在列表中,选择Customer.xsl并单击确定“OK”。注意该XML数据已被格式化,因此列将根据样式表规定的格式排列。

    7、  关闭文件退出Excel

     

    编程打开格式后的XML数据

     

    在前面,我们是在Excel中通过用户界面直接打开的XML文件。本节将演示怎样通过程序激活Excel以打开工作薄。下面的示例说明怎样打开格式后的XML数据,而不需要通过用户操作将DataSet对象中的XML数据转换为HTML

     

    1、  添加引用:Microsoft Excel 10.0 Object LibraryMicrosoft Excel 11.0 Object Library。步骤如下:

    a、  在“项目”菜单中,单击“添加引用”。

    b、  在“COM”标签中,找到Microsoft Excel 10.0 Object LibraryMicrosoft Excel 11.0 Object Library,单击“选择”。

    2、  Form1.cs中添加using

    using Excel = Microsoft.Office.Interop.Excel;

    3、  Visula 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 2002Excel 2003对象模式暴露了OpenXML方法,使用户可以通过程序的方式打开应用了样式表的XML文件。上面的例子没有使用该方法是因为在Automation client模式下调用该方法存在问题。当我们从Excel宏(Excel macro)中调用OpenXML方法时,运行是正确的,然而如果以Automation client方式调用,StyleSheet参数会被忽略。如果要了解更多信息,可以参考微软知识库中的这篇文章:

    307230 BUG: StyleSheets Parameter of the OpenXML Method Ignored When Automating Excel 2

    相关文章:

    如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据

  • 相关阅读:
    索引虚拟oracle virtual index
    用户盘云存储——百度网盘
    数据类型泛型的嵌套使用
    函数返回值C语言中malloc函数返回值是否需要类型强制转换问题
    控制文件oracle controlfile structure
    程序语言POJ 2406 Power Strings
    数组信息[置顶] php数组转换js数组操作及json_encode应用
    代码电话《程序员的第一年》情感编
    泛型通配符泛型中使用 通配符
    数字字符串一道有道实习生笔试算法题分析
  • 原文地址:https://www.cnblogs.com/wayfarer/p/29163.html
Copyright © 2011-2022 走看看