システムを作成する際にユーザーからの要望や焼き直し前のプログラムでちょくちょくExcelファイル(*.xlsx、*.xls)の生成機能が必要になる場合があります。
実行クライアントPCにはExcelがインストールされているが、開発環境にはExcelが無い場合があります。または実行クライアントPCと開発環境のExcelのバージョンが異なる場合もあります。
そんなこんなで不具合が出ては開発や保守に非常に支障がでますのでExcelが入っていなくてもExcelファイルを作成・編集できる「ClosedXML」というライブラリを利用してプログラムからExcelファイルを操作する手順を記録します。
用意するもの
今回、利用する「ClosedXML」はマイクロソフトさんの「OpenXML」のSDKを利用していい感じにxlsxを操作します。
まずは開発環境に「OpenXML SDK」をインストールします。
実はこの「OpenXML SDK」だけでもxlsxファイルを操作できますがかなり面倒な操作が必要になりますので今回の対象からは外します。
※今回はOffice 2010のファイル操作を対象にしていますので「Open XML SDK 2.0 for Microsoft Office」を取得します。
↓「Open XML」の説明HP
https://msdn.microsoft.com/ja-jp/library/office/bb448854(v=office.14).aspx
↓「Open XML SDK 2.0 for Microsoft Office」ダウンロードリンク
https://www.microsoft.com/ja-jp/download/details.aspx?id=5124
↓「ClosedXML」ダウンロードリンク(ClosedXML 0.76.0はExcel 2007/2010対応)
https://closedxml.codeplex.com/
ダウンロードされたものをそのままインストールしてください。
プロジェクトへの追加
Visual Studio 2010 Professionalを元に説明します。
①DocumentFormat.OpenXml.dll
②ClosedXML.dll
の2つのファイルを参照に追加します。
1、ます、機能を追加したいプロジェクトを開いてください。
2、プロジェクトファイルのプロパティから参照のタブをクリックしてください。
ここに各dllファイルを読み込みます。
①は「C:\Program Files\Open XML SDK\V2.0\lib\」にある「DocumentFormat.OpenXml.dll」を追加する。
②はダウンロードサイトから持ってきたファイル(.zip)を解凍して中のClosedXML.dllを追加する。
するとこのようになります。
ソースへの追加
以下の宣言を実行ソースの宣言部に記述します。
1 2 3 4 5 | Imports ClosedXML.Excel Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Threading.Tasks |
これで準備は完了です。
基本設定
例を記載します。単純にC直下にsheet1というシートを持ったTestBook.xlsxを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 | Private Sub CreateExcelFile() 'ワークブックを作成 Dim objWBook As New ClosedXML.Excel.XLWorkbook 'ワークシートを定義して「sheet1」を作成し追加 Dim objSheet as ClosedXML.Excel.IXLWorksheet = objWBook.Worksheets.Add( "sheet1" ) 'ファイルに保存 objWBook.SaveAs( "c:\TestBook.xlsx" ) End Sub |
次の例はファイルの中にいろいろな操作をします。
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | Private Sub CreateExcelFileEdit() 'ワークブックを作成 Dim objWBook As New ClosedXML.Excel.XLWorkbook 'ワークシートを定義して「sheet1」を作成し追加 Dim objSheet as ClosedXML.Excel.IXLWorksheet = objWBook.Worksheets.Add( "sheet1" ) '■□■□ セルの結合 ■□■□ 'シート「sheet1」のA1からA3までを結合する objSheet.Range( "A1:A3" ).Merge() '■□■□ セルの罫線 ■□■□ 'シート「sheet1」結合されたA1からA3までのセルを実践の罫線で囲む objSheet.Range( "A1:A3" ).Style.Border.OutsideBorder = XLBorderStyleValues.Thin 'シート「sheet1」結合されたA1からA3までのセルの上部に二重線の罫線を引く objSheet.Range( "A1:A3" ).Style.Border.TopBorder = XLBorderStyleValues. Double 'シート「sheet1」結合されたA1からA3までのセルの右部に点線の罫線を引く objSheet.Range( "A1:A3" ).Style.Border.RightBorder = XLBorderStyleValues.Dotted 'シート「sheet1」結合されたA1からA3までのセルの左部に一点鎖線の罫線を引く objSheet.Range( "A1:A3" ).Style.Border.LeftBorder = XLBorderStyleValues.DashDot 'シート「sheet1」結合されたA1からA3までのセルの下部に二点鎖線の罫線を引く objSheet.Range( "A1:A3" ).Style.Border.BottomBorder = XLBorderStyleValues.DashDotDot '■□■□ セルに値を入れる ■□■□ 'シート「sheet1」結合されたA1からA3までのセルに「123456」を代入する objSheet.Range( "A1:A3" ).Value = "123456" '■□■□ セルに書式を設定 ■□■□ 'シート「sheet1」結合されたA1からA3までのセルに日付書式をかける objSheet.Range( "A1:A3" ).Style.DateFormat.Format = "yyyy/MM/dd" 'シート「sheet1」結合されたA1からA3までのセルに数値書式をかける objSheet.Range( "A1:A3" ).Style.NumberFormat.Format = "#,##0" '■□■□ セルの文字配置 ■□■□ 'シート「sheet1」結合されたA1からA3までのセルの横位置を中央揃えにする objSheet.Range( "A1:A3" ).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center 'シート「sheet1」結合されたA1からA3までのセルの縦位置を中央揃えにする objSheet.Range( "A1:A3" ).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center '≪セルの塗りつぶし≫ 'シート「sheet1」結合されたA1からA3までのセルの背景色を黄緑色?っぽい色にする(RGBコードから指定) objSheet.Range( "A1:A3" ).Style.Fill.SetBackgroundColor(XLColor.FromArgb(204, 255, 204)) 'シート「sheet1」結合されたA1からA3までのセルの背景色を赤色にする(候補選択) objSheet.Range( "A1:A3" ).Style.Fill.SetBackgroundColor(XLColor.Red) '■□■□ セルの文字装飾 ■□■□ 'シート「sheet1」結合されたA1からA3までのセルの文字色を赤色にする objSheet.Range( "A1:A3" ).Style.Font.FontColor = XLColor.Red 'シート「sheet1」結合されたA1からA3までのセルの文字を太字にする objSheet.Range( "A1:A3" ).Style.Font.Bold = true 'シート「sheet1」結合されたA1からA3までのセルのフォントサイズを16にする objSheet.Range( "A1:A3" ).Style.Font.FontSize = 16 'シート「sheet1」結合されたA1からA3までのセルのフォントを「MS Pゴシック」にする objSheet.Range( "A1:A3" ).Style.Font.FontName = "MS Pゴシック" 'シート「sheet1」結合されたA1からA3までのセルの文字をイタリック(斜め文字)にする objSheet.Range( "A1:A3" ).Style.Font.Italic = True 'ファイルに保存 objWBook.SaveAs( "c:\TestBook.xlsx" ) End Sub |
もっともっとこのライブラリでできることはあります。
ここでは1例しか取り上げませんが試してみてください。
参考にさせていただきました。
http://www.projectgroup.info/tips/Microsoft.NET/tips_0005.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <h3>追記</h3> '■□■□ セルの文字装飾② ■□■□ 'シート「sheet1」結合されたA1からA3までのセルの文字を縦方向にする objSheet.Range( "A1:A3" ).Style.Alignment.TopToBottom = true 'シート「sheet1」結合されたA1からA3までのセルの文字の角度を60度にする objSheet.Range( "A1:A3" ).Style.Alignment.TextRotation = 60 'シート「sheet1」結合されたA1からA3までのセルの文字を縮小して全体を表記する objSheet.Range( "A1:A3" ).Style.Alignment.ShrinkToFit = true 'シート「sheet1」結合されたA1からA3までのセルの文字を折り返して全体を表記する objSheet.Range( "A1:A3" ).Style.Alignment.WrapText = true |
メアドとwebsiteはダミーです。
VS2017 Communityでパワ―ポイントをいじる際に参考にさせてもらいました。
VS2017だと、ブラウザからダウンロードしなくても、
nuget package managerからライブラリ名を検索してプロジェクトに組み込めますね。。