c#でExcelを編集可能なライブラリ

c#でExcelファイルの読み込み・書き込み処理ができると、システムの幅が広がります。 VBAでしたらExcel上でしか実行できませんが、c#で実現できれば、ウェブアプリにしたりWindowsアプリにしたり AWS Lambda などのクラウド上にのせたり、いろいろなことができるようになります。

この記事では、c#でExcelを編集可能なライブラリについて紹介します。

Microsoft.Office.Interop.Excel

公式ドキュメント https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel

Microsoft.Office.Interop.Excel は Excelアプリケーションを直接操作するライブラリです。そのため、実行するサーバーやPCにExcelがインストールされている必要があります。

ただし、メリットもあり、再計算などExcelアプリケーションの機能がすべて使用できるのもその1つです。

サンプルコード

Excelファイルを開き、再計算して保存して終了という処理を行うコードです。 一部の変数定義や値セットを省略しています。

    //using Excel = Microsoft.Office.Interop.Excel;
    
        // Excelインスタンスを生成する
        Excel.Application xlApp = new Excel.Application();
    
        // Excelウィンドウを表示しない
        xlApp.Visible = false;
    
        // Excel警告メッセージを表示しない
        xlApp.DisplayAlerts = false;
    
        try
        {
            // Excelファイルを開く
            Excel.Workbook templateBook = xlApp.Workbooks.Open(inputFilePath);
    
            //再計算
            xlApp.CalculateFull();
    
            // xlsx 形式で出力ファイルパスへ保存する
            templateBook.SaveAs(outputFilePath);
    
            //Excelファイルを閉じる
            templateBook.Close();
    
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            xlApp.Quit();
            // Excelインスタンスを破棄する
    
        }

EPPlus

公式ドキュメント https://epplussoftware.com/

Github https://github.com/EPPlusSoftware/EPPlus

Nuget https://www.nuget.org/packages/EPPlus/

ライセンスが LGPL から Poly Noncommercial に変更になっています。

公式ドキュメントには、コマーシャルライセンス(Commercial license)と開発者(Developer)の2つのライセンスの表記があります。 ライセンスドキュメントを熟読してライブラリ選定が必要です。

サンプルコード

EPPlusを使用して、xlsxファイルを新規作成して保存するコードです。

    //using OfficeOpenXml;
    
        public void EPPlusTutorial1()
        {
            FileInfo xlsFile = new FileInfo(@"d:\epplussample.xlsx");
            using (var package = new ExcelPackage(xlsFile)){
                var sheet = package.Workbook.Worksheets.Add("epplus");
                sheet.Cells["A1"].Value = "Hello UE";
    
                package.Save();
            }
        }

ClosedXML

Github https://github.com/ClosedXML/ClosedXML

Nuget https://www.nuget.org/packages/ClosedXML

ClosedXMLは、Excel2007形式(xlsx, xlsm)のファイルを作成、編集、書き込みするためのライブラリです。

サンプルコード

これも同じように、新規ブックファイルに書き込んで保存するコードです。

//using ClosedXML.Excel;

    public void ClosedXMLTutorial1()
    {
        const string excelFilePath = @"d:\closedxmlsample.xlsx";

        using (XLWorkbook wbook = new XLWorkbook())
        {
            var wsheet = wbook.Worksheets.Add("sample");
            wsheet.Cell("A1").Value = "https://usefuledge.com/";

            wbook.SaveAs(excelFilePath);
        }

    }

NPOI

Github https://github.com/tonyqus/npoi

Nuget https://www.nuget.org/packages/NPOI/

NPOIはExcel2007(xlsx)だけでなく、Excel2003(xls)のファイルも読み書きができるライブラリです。

公式リポジトリの中にサンプルコードが豊富に格納されています。有り難いですね。

https://github.com/tonyqus/npoi/tree/master/examples

サンプルコード

NPOIは他のライブラリに比べると、分かりにくい印象です。

    //using NPOI.XSSF.UserModel;
    //using NPOI.SS.UserModel;
    
        public void NPOITutorial1()
        {
            string xlsFile = @"d:\npoisample.xlsx";
            IWorkbook book = new XSSFWorkbook();
    
            ISheet sheet = book.CreateSheet("npoisheet");
    
            book.Write(new FileStream(xlsFile, FileMode.Create, FileAccess.ReadWrite));
        }

作業効率化を目的としたWindows・OfficeVBAアプリケーションを開発します

詳しくはこちらに記載しております。不明な点がありましたら、お問い合わせフォームからご連絡をお願いします。

https://usefuledge.com/appdev.html

速攻でメモできる QuickNote リリースしました!

QuickNoteは動作が超軽量でサクサクかけるノートアプリです。一瞬の閃きを逃さずにノートを開き書き始めることができます。 アカウント登録も不要です。お試しあれ!

Excel操作をコマンドで! proBoarderExcel

Excelはマウスで操作するのが基本ですが、マウス操作に疲れてはいませんか? キーボードでExcel操作ができるようになるアプリです。オープンソースで無料です。

積み上げ! Daily Stack リリースしました!

Daily Stack は日々の積み上げを管理するToDoアプリです。過去の積み上げの振り返りだけでなく、ツイート機能もあります。 アカウント登録不要ですぐに使い始めることができます。

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱