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

C#ではアプリケーションの開発に用いられますが、Excelを制御することもできます。この記事ではExcelのオートメーション化について紹介します。
- SE
- そもそもオートメーション化って、どういった意味なのでしょうか?
- PM
- 例えば、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;
}
}
}
|
- SE
- Excelのオートメーション化には二通りの方法があるのですね。どちらでも対応できるように今から勉強します。
- PM
- そうだね。現場によって使用するオートメーション化も変わってくるから、より多くの方法を覚えておきましょうね。
現場では最適なExcelのオートメーション化を
上記でご紹介したオートメーション化の方法以外にもClosedXMLといったオープンソースライブラリを使用してExcelのオートメーション化は可能です。
しかし、こちらは拡張子xlsには対応していないライブラリになります。
xlsxのみの対応で良いのであれば、こちらを利用する選択肢も有効です。
それぞれの現場に最適なExcelオートメーションのコーディングを導入しましょう。
Search キーワード検索
Popular 人気の記事
-
【VB.NET入門】DataGridViewの使い方まとめ
公開: 更新:
reccomended おすすめ記事
-
【.NETが統合】.NET 5の概要と今後のリリース予定
公開: 更新:
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)