Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

ComponentOne Studio for WPFでアプリケーションからExcelを取り扱う

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/03/03 14:00

 前回は、ComponentOne Studio for WPFを用いて、アプリケーションをWordやPDFと連携させる方法を紹介しました。今回は業務で利用する頻度の高い、Excelファイルを扱う方法を紹介します。前回の記事と合わせて、ComponentOne Studioのファイル連携について把握するお役に立てば幸いです。

サンプルファイル

 本記事にアップロードしているサンプルファイルは、GitHubでも公開しています。

今回紹介するコンポーネント

 本記事では以下のコンポーネントを紹介します。

C1Excel(Excel for WPF)

 ComponentOne Studioに含まれるExcelファイルを扱うためのコンポーネントです。C1Excelを利用すれば、Excelファイルの作成、編集が可能になります。また、C1Pdf、C1Wordと組み合わせることで、PDF形式やWord形式で出力することができます。

対象読者

 Visual Studioを利用してアプリケーションを作成した経験がある、またはC#、Visual Basicなどの.NET系言語での開発経験がある方。

必要な環境

 ComponentOne Studio for WPFを利用するには以下の環境が必要となります。

  • Visual Studio 2010/2012/2013/2015 日本語版
  • .NET Framework 4.5.2/4.6/4.6.1/4.6.2

 本記事はVisual Studio Community 2015、.NET Framework 4.6環境で画像キャプチャーの取得、動作検証を行っております。

 なお、Microsoft ExcelなどのOffice製品が無くても開発可能です(作成したExcel形式のファイルを閲覧する場合にExcelが必要になりますが、アプリケーションの開発に必要ではありません)。

コンポーネントの導入

ComponentOne Studio for WPFのインストール

 ComponentOne Studio for WPFの導入については過去の記事「モダンな環境に対応する便利で多様なコンポーネント ~ バーコード/Excel/PDF/高解像度対応/タッチ操作/タイル」を参照ください。左記事では、WinFormsを選択してインストールしていますが、本記事ではWPFに読み替えてください。

 ComponentOne Studio for WPFのバージョンは、執筆時点で最新の「2016J v3」を利用します。

Excel形式でファイルを保存する

 C1Excelを用いて、Excel形式のファイルを出力する方法を紹介します。

Excel形式での保存方法

 まずはシンプルにセルに数字を入力したExcelファイルを保存します。

参照の追加

 ソリューションエクスプローラーの「参照」を右クリック→「参照の追加」をクリックします。

参照の追加
参照の追加

 左ナビの「アセンブリ」→「拡張」から「C1.WPF.Excel JPN」にチェックを入れ、右下の「OK」をクリックします。

C1.WPF.Excel JPNの追加
C1.WPF.Excel JPNの追加

usingの追加

 MainWindow.xaml.csに以下のusingを追加します。

usingの追加
using C1.WPF.Excel;

処理の記述

 アプリケーションの起動時にExcel形式のファイルを保存します。

 MainWindow.xaml.csのコンストラクタに以下のように処理を記述します。

Excelファイルの保存処理
public MainWindow()
{
    InitializeComponent();

    // C1XLBookがExcelブックを表すクラス
    C1XLBook book = new C1XLBook();

    // XLSheetがExcelのシートを表す
    XLSheet sheet = book.Sheets[0];

    // 1行目の1から3列目に値を設定する
    sheet[0, 0].Value = 1;
    sheet[0, 1].Value = 2;
    sheet[0, 2].Value = 3;

    // 保存する
    book.Save(@"C:\<ドキュメントフォルダのパス>\excel.xls");
}

 保存するファイルのパスはご自分の環境のドキュメントフォルダを指定してください。

 アプリケーションをデバッグ実行すると、ドキュメントフォルダにexcel.xlsファイルが作成されます。

生成されたExcelファイルを開いた
生成されたExcelファイルを開いた

セルの書式を設定する

 セルに書式を設定してみます。

 セルの書式設定にはXLSheetクラスを用います。

セルに書式を設定する
public MainWindow()
{
    InitializeComponent();

    // C1XLBookがExcelブックを表すクラス
    C1XLBook book = new C1XLBook();

    // XLSheetがExcelのシートを表す
    XLSheet sheet = book.Sheets[0];

    // 1行目の1から3列目に値を設定する
    sheet[0, 0].Value = 1;
    sheet[0, 1].Value = 2;
    sheet[0, 2].Value = 3;

    // スタイルを設定する
    XLStyle style = new XLStyle(book);

    // 文字色を青色に
    style.ForeColor = Colors.Blue;

    sheet[0, 1].Style = style;

    // 保存する
    book.Save(@"C:\<ドキュメントフォルダのパス>\excel.xls");
}
スタイルを変更する
スタイルを変更する

数式を扱う

 セルに式を用いることもできます。

セルに式を用いる
public MainWindow()
{
    InitializeComponent();

    // C1XLBookがExcelブックを表すクラス
    C1XLBook book = new C1XLBook();

    // XLSheetがExcelのシートを表す
    XLSheet sheet = book.Sheets[0];

    // 1行目の1から3列目に値を設定する
    sheet[0, 0].Value = 1;
    sheet[0, 1].Value = 2;
    sheet[0, 2].Value = 3;

    // スタイルを設定する
    XLStyle style = new XLStyle(book);
    style.ForeColor = Colors.Blue;

    sheet[0, 1].Style = style;

    // 式を用いる
    // 1行目の1から3列のSUM(合計)を4列目に求める
    sheet[0, 3].Formula = "SUM(A1: C1)";

    // 保存する
    book.Save(@"C:\<ドキュメントフォルダのパス>\excel.xls");
}
数式を利用する(4列目がSUMの値)
数式を利用する(4列目がSUMの値)

画像の表示

 セルに画像を指定することもできます。

セルに画像を指定する
public MainWindow()
{
    InitializeComponent();

    // C1XLBookがExcelブックを表すクラス
    C1XLBook book = new C1XLBook();

    // XLSheetがExcelのシートを表す
    XLSheet sheet = book.Sheets[0];

    // 1行目の1から3列目に値を設定する
    sheet[0, 0].Value = 1;
    sheet[0, 1].Value = 2;
    sheet[0, 2].Value = 3;

    // スタイルを設定する
    XLStyle style = new XLStyle(book);
    style.ForeColor = Colors.Blue;

    sheet[0, 1].Style = style;

    // 式を用いる
    // 1行目の1から3列のSUM(合計)を4列目に求める
    sheet[0, 3].Formula = "SUM(A1: C1)";

    // 画像を設定する
    // プロジェクトにicon.pngというファイルが含まれている
    WriteableBitmap img = new WriteableBitmap(new BitmapImage(new Uri("icon.png", UriKind.Relative)));
    sheet[1, 0].Value = img;

    // 保存する
    book.Save(@"C:\<ドキュメントフォルダのパス>\excel.xls");
}

 C1XLBookクラスのValueプロパティには、このように画像を指定することもできます。

セルに画像を指定する
セルに画像を指定する

Excel形式のファイルを読み込む

 既存のExcelファイルを読み込んで編集する方法を紹介します。

 以下のサンプルは、これまでのサンプルコードで作成してきたexcel.xlsファイルがドキュメントフォルダーに存在することを想定しています。

既存のExcelファイルを編集する
public MainWindow()
{
    InitializeComponent();

    C1XLBook book = new C1XLBook();

    // ファイルを読み込む
    book.Load(@"C:\<ドキュメントフォルダのパス>\excel.xls");

    // シートを編集する
    book.Sheets[0][0, 0].Value = 5;

    // 別名で保存する
    book.Save(@"C:\<ドキュメントフォルダのパス>\excel2.xls");
}

 既存ファイルの読み込みもC1XLBookクラスで扱うため、ファイルの生成と同様の使い方で処理が記述できます。

 生成したファイルを規定のプログラムで開きたい場合は以下のように記述します。

ファイルを規定のプログラムで開く
System.Diagnostics.Process.Start(@"C:\<ドキュメントフォルダのパス>\excel.xls");

読み込んだExcelデータとその他コンポーネントを組み合わせる

 C1XLBookクラスに読み込んだExcelファイルのデータは、中身を取り出してFlexGridコントロールに表示することができます。

ExcelのデータをFlexGridコントロールに表示する
C1XLBook book = new C1XLBook();

// ファイルを読み込む
book.Load(@"C:\Users\macni\Documents\mybook.xls");

// シートを編集する
book.Sheets[0][0, 0].Value = 5;

// データをFlexGrid用に加工する
List<int> list = new List<int>();

list.Add(Convert.ToInt32(book.Sheets[0][0, 0].Value));
list.Add(Convert.ToInt32(book.Sheets[0][0, 1].Value));
list.Add(Convert.ToInt32(book.Sheets[0][0, 2].Value));

// FlexGridで表示する
FlexGrid.ItemsSource = list;

 さらにFlexGridを、RenderTargetBitmapクラスを利用して画像化することで、C1Pdfコンポーネントを用いてPDFとして保存したり、C1WordコンポーネントでWord形式で保存したりすることが可能になります。

 以下にRenderTargetBitmapで画像にするコードを紹介します。PDFやWord形式にしたい場合は、「ComponentOne Studio for WPFでアプリケーションからWord、PDFを取り扱う」などを参考にして置き換えてください。

FlexGridコントロールを画像化する
if (!Double.IsNaN(FlexGrid.Width))
{
    var size = new System.Windows.Size(FlexGrid.Width, FlexGrid.Height);
    FlexGrid.Measure(size);
    FlexGrid.Arrange(new Rect(size));

    // RenderTargetBitmapでFlexGridをBitMapに変換する
    var renderBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96.0d, 96.0d, PixelFormats.Pbgra32);
    renderBitmap.Render(FlexGrid);

    // Imageコントロールに表示する
    // C1PdfやC1Wordを利用して保存することも可能
    image.Source = BitmapFrame.Create(renderBitmap);
}
読み込んだExcelをFlexGridに表示する
読み込んだExcelをFlexGridに表示する

まとめ

 ComponentOne Studio for WPFで利用可能なC1Excelを用いて、Excelファイルを簡単に扱う方法を紹介しました。業務で頻繁に利用されるExcelファイルをアプリケーションで利用できるC1Excelコンポーネントを知っておくと、仕様策定の際により業務で使いやすいアプリケーションを作成することができるケースがあると思います。

 また、C1PdfやC1Word、FlexGridといったComponentOne Studio for WPFのその他コンポーネントと組み合わせることで、PDFやWordといった他の形式での出力が可能になる点もポイントです。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 西村 誠(ニシムラ マコト)

     Microsoft MVP Windows Platform Development。  Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。  ブログ:眠るシーラカンスと水底のプログラマー  著書:基礎から学ぶ Windows...

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5