C#でExcelをオートメーション化する手法とは

C#ではアプリケーションの開発に用いられますが、Excelを制御することもできます。この記事ではExcelのオートメーション化について紹介します。
- システム
エンジニア - そもそもオートメーション化って、どういった意味なのでしょうか?
- プロジェクト
マネージャー - 例えば、Excelのような全く別のアプリケーションを、自分が開発しているプログラムで制御できるようにすることだよ。
C#でExcelをオートメーション化する方法
Excelを利用しているユーザーは数多くいます。そして、C#で開発しているプログラムから利用頻度の高いExcelを出力することは、現場で求められるコーディングスキルのひとつです。
アプリケーションを起動して、新しいブックの作成やセルにデータを設定するなどがExcelのオートメーション化といった作業になります。
このオートメーション化には、二通りのパターンが存在しています。
Microsoft.Office.Interop.Excelを利用してのCOM参照する方法(非推奨)
COM参照では、C#で開発したアプリケーションが起動されている裏で、Excelを実際に立ち上げるためにEXCEL.EXEも同時に起動します。
そのため、処理が遅くなることが多くあります。
また、COM参照の場合は自動で不要なメモリを解放する機能「ガベージコレクション」が機能しません。
開発者自身がSystem.Runtime.InteropServices.Marshal.ReleaseComObject()メソッドを呼び出し、参照したCOMオブジェクトを解放する必要があります。開発者自身に委ねられるということは、それだけ解放漏れも発生する可能性が高いので、ここでは非推奨とさせていただきます。
オープンソースライブラリである「NPOI」を利用する方法(推奨)
歴史あるApache POIの.NETバージョンであり、実績があります。また、拡張子.xlsと.xlsxの両方に対応しています。
C#でNPOIを利用してオートメーション化
拡張子.xlsファイルはHSSFWorkbookクラスを、xlsxファイルはXSSFWorkbookクラスを利用します。
このクラスをインスタンス化することで、ブックの作成やセルの編集作業が可能になります。
まずはNPOIをお使いのVisual Stuidoにインストールしましょう。今回使用するVisual StudioのバージョンはCommunity 2017です。
- Visual Studioのプロジェクトを作成した後、赤枠の箇所を右クリックし、「ソリューションのNuGetパッケージの管理」を選択します
- 参照を選択して、NPOIと打ち込みます
- NPOIを選択して、右に出力されますチェックボックスをONにし、インストールボタンをクリックします
- インストールが完了すれば、参照にNPOIが含まれていることを確認しましょう
以下、NPOIを利用したサンプルソースです。実行するとブックを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
using System; using System.IO; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; namespace Sample_NPOI { class Program { static void Main( string[] args ) { try { string filePath = "sample.xlsx"; //ブック作成 var book = CreateNewBook( filePath ); //シート無しのexcelファイルは保存は出来るが、開くとエラーが発生する book.CreateSheet( "newSheet" ); //ブックを保存 using( var fs = new FileStream( filePath, FileMode.Create ) ) { book.Write( fs ); } } catch( Exception ex ) { Console.WriteLine( ex ); } } //ブック作成 static IWorkbook CreateNewBook( string filePath ) { IWorkbook book; var extension = Path.GetExtension( filePath ); // HSSF => Microsoft Excel(xls形式)(excel 97-2003) // XSSF => Office Open XML Workbook形式(xlsx形式)(excel 2007以降) if( extension == ".xls" ) { book = new HSSFWorkbook(); } else if( extension == ".xlsx" ) { book = new XSSFWorkbook(); } else { throw new ApplicationException( "CreateNewBook: invalid extension" ); } return book; } } } |
- システム
エンジニア - Excelのオートメーション化には二通りの方法があるのですね。どちらでも対応できるように今から勉強します。
- プロジェクト
マネージャー - そうだね。現場によって使用するオートメーション化も変わってくるから、より多くの方法を覚えておきましょうね。
現場では最適なExcelのオートメーション化を
上記でご紹介したオートメーション化の方法以外にもClosedXMLといったオープンソースライブラリを使用してExcelのオートメーション化は可能です。
しかし、こちらは拡張子xlsには対応していないライブラリになります。
xlsxのみの対応で良いのであれば、こちらを利用する選択肢も有効です。
それぞれの現場に最適なExcelオートメーションのコーディングを導入しましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅)遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅)病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅)開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)