Visual C# .NET を使用して XML データを Microsoft Excel 2002 または Microsoft Excel 2003 に転送する方法

文書翻訳 文書翻訳
文書番号: 307029 - 対象製品
この記事は、以前は次の ID で公開されていました: JP307029
Microsoft Visual Basic .NET については、次の資料を参照してください。307021
すべて展開する | すべて折りたたむ

目次

概要

Excel 2002 には、XML (Extensible Markup Language) 形式のファイルを開くための機能が導入されています。整形式 (well-formed) の XML ファイルは、ユーザー インターフェイスから、またはコードを記述することによって直接 Excel 2002 または Excel 2003 で開くことができます。

Microsoft Visual C# 2005 または Microsoft Visual C# .NET を使用すると、Excel の XML 機能を利用してシームレスにデータをブックに転送し、書式や配置を自由に設定したデータを提供することができます。この資料は、こうした作業を行う方法を示したものです。

Excel 2002 または Excel 2003 で使用する XML を DataSet から生成する

ここでは、DataSet オブジェクトを作成し、その中にあるデータを WriteXML メソッドで XML ファイルにエクスポートする方法を示します。生成される XML ファイルは、直接 Excel で開くことができます。例として、ここでは Jet OLEDB プロバイダを使用して、Microsoft Access の Northwind サンプル データベースから DataSet オブジェクトを作成します。ただし、Visual C# 2005 または Visual C# .NET で作成した DataSet オブジェクトで同様のコードを使用できます。
  1. Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET を起動します。[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[プロジェクトの種類] ボックスの一覧の [Visual C# プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [Windows アプリケーション] をクリックし、[OK] をクリックします。デフォルトで Form1 が作成されます。
  2. [表示] メニューの [ツールボックス] をクリックしてツールボックスを表示し、Form1 にボタンを追加します。
  3. [Button1] をダブルクリックします。フォームのコード ウィンドウが表示されます。
  4. 次の using ディレクティブを Form1.cs の先頭部分に追加します。
    using System.Data.OleDb;
    using System.Xml;
    					
  5. 次の private メンバ変数を 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 [得意先コード], 得意先名, 担当者名, " 
                   + "都道府県, 電話番号 from 得意先", 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# によってデフォルトでフォームが 1 つ追加されます。フォームの名前は Form1 で、フォームを表す 2 つのファイルには Form1.cs および Form1.Designer.cs という名前が付けられます。Form1.cs にはコードを記述します。ツールボックスからコントロールをドラッグ アンド ドロップすると、Windows フォーム デザイナにより、それらの動作を実装するためのコードが Form1.Designer.cs ファイルに書き込まれます。

    Visual C# 2005 の Windows フォーム デザイナの詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。
    http://msdn2.microsoft.com/ja-jp/library/ms173077.aspx
  7. F5 キーを押してプログラムをビルドし、実行します。
  8. [Button1] をクリックして XML ファイルを作成し、Form1 を閉じてプログラムを終了します。
  9. Excel 2002 または Excel 2003 を起動し、出力ファイル C:\Customers.xml を開きます。
  10. XML の構文が解析され、新しいブックの行と列にどのように展開されるのかを確認した後、ファイルを閉じて Excel を終了します。

スタイルシートを使用して XML の書式を設定する

この手順では、スタイルシート (XSL) を使用して、Excel のブックで XML データに書式および配置を設定する方法を示します。
  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">得意先コード</TD>
              <TD CLASS="HDR">得意先名</TD>
              <TD CLASS="HDR">担当者</TD>
              <TD CLASS="HDR">都道府県</TD>
              <TD CLASS="HDR">電話番号</TD>
              <xsl:for-each select="NewDataSet/Table">
                <TR>
                  <TD><xsl:value-of select="得意先コード"/></TD>
                  <TD><xsl:value-of select="得意先名"/></TD>
                  <TD><xsl:value-of select="担当者名"/></TD>
                  <TD><xsl:value-of select="都道府県"/></TD>
                  <TD><xsl:value-of select="電話番号"/></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 がスタイルシート (Customers.xsl) の指定に使用する処理命令が XML ファイルに書き込まれます。

  3. F5 キーを押してプログラムをビルドし、実行します。
  4. [Button1] をクリックして XML ファイルを作成し、Form1 を閉じてプログラムを終了します。
  5. Excel 2002 または Excel 2003 を起動し、出力ファイル C:\Customers.xml を開きます。
  6. Excel で XML のスタイルシートを指定する処理命令が見つかると、ファイルを開く際に確認のダイアログ ボックスが表示されます。この [XML ファイルのインポート] ダイアログ ボックスで、[次の中から選択するスタイルシートを適用してファイルを開く] をクリックします。一覧から [Customers.xsl] を選択して、[OK] をクリックします。XML データに書式が設定され、スタイルシートに従った列の配置になります。
  7. ファイルを閉じて Excel を終了します。

変換した XML をプログラムから開く

これまで、Excel のユーザー インターフェイスを使用して XML ファイルを開いてきました。ここでは、Excel を自動化して、プログラムでブックを開く方法を示します。次のサンプルは、DataSet オブジェクトの XML を最初に HTML 変換することにより、ユーザー インターフェイスを介入させずに変換済みの XML を開く方法を示したものです。
  1. Microsoft Excel 10.0 Object Library または Microsoft Excel 11.0 Object Library への参照を追加します。これを行うには、次の手順を実行します。
    1. [プロジェクト] メニューの [参照の追加] をクリックします。
    2. [COM] タブをクリックし、[Microsoft Excel Object 10.0 Library] または [Microsoft Excel Object 11.0 Library] をクリックし、[選択] をクリックします。
    3. [参照の追加] ダイアログ ボックスで [OK] をクリックして、選択を確定します。選択したライブラリのラッパーを生成するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。
  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 [得意先コード], 得意先名, 担当者名, " 
    	+ "都道府県, 電話番号 from 得意先", 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] をクリックして、変換した XML を Excel で開きます。
: Excel 2002 および Excel 2003 のオブジェクト モデルでは、スタイルシートを適用した XML ファイルをプログラムから開くための OpenXML メソッドが公開されています。しかし、オートメーション クライアントからこのメソッドを使用すると問題が発生することがわかっているため、上記の例ではこのメソッドを呼び出していません。Excel マクロから呼び出した場合は、OpenXML メソッドは仕様どおりに機能します。ただし、このメソッドをオートメーション クライアントから呼び出すと、StyleSheet パラメータは無視されます。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
307230 [BUG] Excel 2002 のオートメーションで OpenXML メソッドの StyleSheets パラメータが無視される

関連情報

詳細については、以下の「サポート技術情報」 (Microsoft Knowledge Base) の資料を参照してください。
288215 [INFO] Microsoft Excel 2002 と XML
302084 Microsoft Visual C# .NET を使用して Microsoft Excel を自動化する方法
301216 Visual Basic .NET を使用してデータベースから DataSet オブジェクトを取得する方法
306023 Visual C# 2005 または Visual C# .NET を使用してデータを Excel ブックに転送する方法

プロパティ

文書番号: 307029 - 最終更新日: 2006年12月21日 - リビジョン: 7.2
この資料は以下の製品について記述したものです。
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Excel 2003
キーワード:?
kbhowtomaster KB307029
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com