Excel ブック (.xlsx) をプログラムで扱う – 準備 1


◆Excel ブック (.xlsx) をプログラムで扱う

Excel 2007 からファイルフォーマットが「Office Open XML」形式となり、仕様が公開され、プログラムから扱いやすくなりました。しかしながら、膨大なタグの仕様を適切に把握してブックを扱うには、多大な労力を要します。システムを構築する際には、そこに労力をかけるよりもコンポーネントを使用した方が効率的です。「Excel ブック (*.xlsx) 形式概要」でも紹介した通り、Excel ブック (.xlsx) をプログラムで扱うコンポーネントは複数あります。今回からは「Open XML SDK 2.5」と「ExcelCreator 8.0 for .NET」を使用して Excel ブック (.xlsx) をプログラムで扱う方法を紹介していきたいと思います。まずは「Open XML SDK 2.5」を使用する準備と、作成したブックについて見ていきます。


◆検証環境
OS Windows 8(x64)
開発環境 Visual Studio 2012
CPU Intel(R) Core(TM)2 Duo E8400 @ 3.00GHz
メモリ 4GB
その他 SSD 搭載


◆Open XML SDK のダウンロードとインストール

Open XML SDK は、Microsoft 社が提供するライブラリで、Open XML ドキュメントを操作するための、厳密に型指定されたパーツ クラスおよびコンテンツ クラスが提供されています。現在一般公開されているバージョンは 2.0 で、CTP 版である 2.5 も公開されています。今回は 2.5 を使用してさまざまな機能を検証していきます。

Open XML SDK 2.5 CTP 版は、下記のサイトからダウンロードできます。

http://www.microsoft.com/en-us/download/details.aspx?id=30425

OpenXMLSDKV25.msi をダウンロード、実行してインストールを行います。


◆プロジェクトの作成と参照の追加

次に Visual Studio 2012 を起動し、コンソールアプリケーション「OXML25ConsoleApplication」を作成します。参照の追加で先ほどインストールした Open XML SDK 2.5 のアセンブリを追加します。ここでは WindowsBase.dll も追加しておきます。

追加したアセンブリを見ると、.NET Framework 4 のランタイムを使用していることが分かります。動作環境には注意が必要です。



Excel ブック (.xlsx) を新規に作成するコード(Open XML SDK 2.5)

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

namespace OXML25ConsoleApplication
{
    /// <summary>
    /// Program クラス
    /// </summary>
    class Program
    {
        /// <summary>
        /// Main
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // SpreadsheetDocument を作成します。
            SpreadsheetDocument spreadsheetDocument = 
                SpreadsheetDocument.Create(@"OXMLCreate.xlsx", SpreadsheetDocumentType.Workbook);

            // WorkbookPart をドキュメントに追加します。
            WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
            workbookpart.Workbook = new Workbook();

            // WorksheetPart を WorkbookPart に追加します。
            WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
            worksheetPart.Worksheet = new Worksheet(new SheetData());

            // Sheets を Workbook に追加します。
            Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
                AppendChild<Sheets>(new Sheets());

            // 新しい worksheet を workbook に追加します。
            Sheet sheet = new Sheet()
            {
                Id = spreadsheetDocument.WorkbookPart.
                    GetIdOfPart(worksheetPart),
                SheetId = 1,
                Name = "Sheet1"
            };
            sheets.Append(sheet);
            // ワークブックを保存します。
            workbookpart.Workbook.Save();

            // ドキュメントをクローズします。
            spreadsheetDocument.Close();
        }
    }
}

作成したブックの拡張子を .zip に変更し、解凍して構造を確認すると、必要最小限の XML ファイルで構成されていることが分かります。


XML ファイル一覧

  • [Content_Types].xml
  • _rels/.rels
  • xl/_rels/workbook.xml.rels
  • xl/workbook.xml
  • xl/worksheets/sheet.xml

Excel で作成した場合と比べ、下記の XML ファイルがありません。

  • docProps/core.xml
  • docProps/app.xml
  • xl/theme/theme1.xml
  • xl/styles.xml

また、作成されたブックを解凍して中の XML ファイルを確認すると、Excel で作成した時とは違い、ところどころにプレフィクス”x:”が付加されています。

xl/workbook.xml

<?xml version="1.0" encoding="utf-8"?>
<x:workbook xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheets>
<x:sheet name="Sheet1" sheetId="1" r:id="Rb519efa492dc4cf0" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" />
</x:sheets>
</x:workbook>


_rels/.rels

<?xml version="1.0" encoding="utf-8"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="/xl/workbook.xml" Id="Rcc46d2eda9cd4bed" />
</Relationships>


xl/worksheets/sheet.xml

<?xml version="1.0" encoding="utf-8"?>
<x:worksheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheetData />
</x:worksheet>


xl/_rels/workbook.xml.rels

<?xml version="1.0" encoding="utf-8"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="/xl/worksheets/sheet.xml" Id="Rb519efa492dc4cf0" />
</Relationships>


[Content_Types].xml

<?xml version="1.0" encoding="utf-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" />
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
<Override PartName="/xl/worksheets/sheet.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" />
</Types>


いずれも必要最小限の内容で作成されています。
次回は ExcelCreator 8.0 for .NET を使用する準備について紹介します。

You can leave a response, or trackback from your own site.

Leave a Reply