Office関連

ClosedXMLやEPPlusでExcelファイルを読み書きしてみた。

今回の記事の発端は下記のQiita投稿。

・Excelファイルを C# と VB.NET で読み込む “正しい” 方法 – Qiita
http://qiita.com/midori44/items/acab9106e6dad9653e73

.NETからExcelファイルを扱う → Interop → プロセスが残り続ける、これを経験した人は結構多いのではないかと思います。

このInterop問題に対して、上記投稿ではClosedXMLNPOIといったライブラリの利用を薦めています。

たしかにExcelを利用しないライブラリであれば、Excelのインストールは不要だし、処理速度も早そうです。

というわけで、今回はClosedXMLEPPlusを使ってExcelファイルの読み書きを行ってみることにしました。

ClosedXMLによるExcelファイル操作

まずはライブラリのインストールですが、CodePlexにもファイルはありますが、NuGetからファイルを取得した方がお手軽です。
(DocumentFormat.OpenXmlも必要なので忘れずに取得)

ClosedXML.dll」と「DocumentFormat.OpenXml.dll」ファイルの準備ができたら、あとはそれらを参照してコードを書くだけです。

using System;
using ClosedXML.Excel;

namespace ClosedXMLSample
{
  class Program
  {
    public static void Main(string[] args)
    {
      using (var book = new XLWorkbook(@"C:\Test\Sample.xlsx", XLEventTracking.Disabled)) {
        var sheet = book.Worksheet(1);
        var address = sheet.RangeUsed().RangeAddress.LastAddress;
        //セル内容列挙
        for (int i = 1; i <= address.RowNumber; i++) {
          for (int j = 1; j <= address.ColumnNumber; j++) {
            Console.WriteLine("Address:{0}, Value:{1}", sheet.Cell(i, j).Address, sheet.Cell(i, j).Value);
          }
        }
        //セルに書き込んで別名保存
        sheet.Range("C1").Value = "漢字テスト";
        sheet.Cell(2, 3).Value = "abcde";
        book.SaveAs(@"C:\Test\Sample2.xlsx");
      }
      Console.WriteLine("-- 処理が終了しました --");
      Console.ReadKey(true);
    }
  }
}

「Sample.xlsx」ファイルを読み込んでセルの値を取得・書き込みをした後に別名保存するだけの簡単なコードです。

コードを見れば分かる通り、VBAのコードに雰囲気が似ているので、VBAに慣れている方はすんなりコードを書けそうです。

EPPlusによるExcelファイル操作

今度はEPPlusを使ってみます。
こちらもNuGetから取得した方が楽です(EPPlus.dll)。

using System;
using System.IO;
using OfficeOpenXml;

namespace EPPlusSample
{
  class Program
  {
    public static void Main(string[] args)
    {
      using (var excel = new ExcelPackage(new FileInfo(@"C:\Test\Sample.xlsx"))) {
        var sheet = excel.Workbook.Worksheets[1];
        var address = sheet.Dimension;
        //セル内容列挙
        for (int i = address.Start.Row; i <= address.End.Row; i++) {
          for (int j = address.Start.Column; j <= address.End.Column; j++) {
            Console.WriteLine("Address:{0}, Value:{1}", sheet.Cells[i, j].Address, sheet.Cells[i, j].Value);
          }
        }
        //セルに書き込んで別名保存
        sheet.Cells["C1"].Value = "漢字テスト";
        sheet.Cells[2, 3].Value = "bbbbb";
        excel.SaveAs(new FileInfo(@"C:\Test\Sample3.xlsx"));
      }
      Console.WriteLine("-- 処理が終了しました --");
      Console.ReadKey(true);
    }
  }
}

ClosedXMLの動作確認で書いたコードとほぼ同じ処理内容ですが、コードの書き方は若干異なります。

ClosedXMLの方がVBAっぽくて個人的には書きやすかったのですが、「EPPlusの基本的な使い方メモ (xlsx形式, Excelのインストール必要ない, COM使わない)」や「Creating Reports in Excel 2007 using EPPlus」を見ると、EPPlusの方が色々処理できそうな感じです。

おわりに

今回ClosedXMLEPPlusの2つのライブラリを試してみましたが、どちらもお手軽で簡単にExcelファイルを操作するコードが書けました。
Excelのインストールの有無やCOMオブジェクトの解放を気にしなくて良いので、非常に便利です。

WordやPowerPoint用の似たようなライブラリも無いものかと検索してみたのですが、こちらは有償のものしかヒットしませんでした。
今のところ、WordやPowerPointファイルを操作するのは「NetOffice」がお手軽なのかな?と思います。

関連Webページ

Microsoft Edgeの拡張機能を使って短縮URLを取得してみる(2)前のページ

【まほうのルミティア】ルミティアジュエルを買ってきたよ。次のページ

関連記事

  1. Office関連

    Word 2013とWord 2010のダミー文章の比較

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  2. Office関連

    メモ帳だけでOutlook用アドインを作ってみる。

    「SharpDevelopでExcel用COMアドインを作成する方法」…

  3. Office関連

    [Outlook VBA]Outlookオブジェクトモデルとして公開されていないプロパティにアクセス…

    前回の記事で久しぶりにOutlookのマクロを触りましたが、ついでに昔…

  4. Office関連

    [Office]WordやPowerPointで画像の画質が悪くなった時の対処方法

    WordやPowerPointで画像を貼りつけたときやファイルを保存し…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP