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 アドイン

    YO OFFICE(Yeoman)を使ってOffice アドインのひな型を作成する方法

    Webアプリのひな型を一発で作ってくれる便利ツール「Yeoman」には…

  2. Office関連

    OneNoteの指定したセクションをページごとに指定した形式で出力するマクロ

    今回はOneNoteの指定したセクションをページごとに指定した形式で出…

  3. Microsoft Teams

    Microsoft Teamsでタブの構築を試してみました。

    下記記事の通り、Office 365に新たなコラボレーションツール「M…

  4. Excel

    Locationヘッダの情報を取得するVBAマクロ

    通常、下記のようなリダイレクトされるWebページを開いたとき、…

  5. Windows 10

    続・Microsoft Edgeを操作するVBAマクロ(DOM編)

    以前VBAからMicrosoft Edgeを操作するマクロについて記事…

  6. アイコン一覧

    Office 365アイコン(imageMso)一覧(H)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP