fc2ブログ

【ClosedXML】 Style.NumberFormat

 今回は、セルの表示形式を設定する方法を説明します。
 セルの表示形式の設定はStyle.NumberFormatで行います。
 似たようなものにStyle.DateFormatというのがありますが、NumberFormatで日時の書式設定も行えるのでNumberFormatを使用します。
using ClosedXML.Excel;
using System;
using System.IO;

namespace ClosedXml09
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Book.xlsx");

            using(var book = new XLWorkbook((XLEventTracking.Disabled)))
            {
                var sheet = book.AddWorksheet("シート1");

                // 0で桁数合わせ
                sheet.Cell("A1").SetValue(12)
                    .Style.NumberFormat.SetFormat("0000");

                // 小数点第2位まで表示
                sheet.Cell("A2").SetValue(12.123456)
                    .Style.NumberFormat.SetFormat("0.00");

                // カンマ区切り
                sheet.Cell("A3").SetValue(123456.78)
                    .Style.NumberFormat.SetFormat("#,##0");

                // 日時
                sheet.Cell("A4").SetValue(DateTime.Now)
                    .Style.NumberFormat.SetFormat("yyyy/mm/dd hh:mm:ss");

                book.SaveAs(filePath);
            }
        }
    }
}
 Style.NumberFormatにはFormatプロパティとNumberFormatIdプロパティの2つのプロパティがあります。
 NumberFormatIDプロパティはIDからだとどんな書式が指定されているのかがわからないので、Formatプロパティを使うことを推奨します。
 Formatプロパティを使用した場合は、「表示形式」の「ユーザー定義」に書式を設定したことになります。
 そのためNumberFormatとなっていますが日時等の書式も指定可能です。
 このサンプルコードを実行すると以下の様になります。
表示形式
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

【ClosedXML】 Style.Font

 今回はFontの設定について説明します。
 Fontの設定はStyle.Fontで行えます。
 使用するフォントや文字色等の変更、下線、文字飾りの設定が可能です。
using ClosedXML.Excel;
using System;
using System.IO;

namespace ClosedXml08
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "book.xlsx");

            using(var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                var sheet = book.AddWorksheet("シート1");

                sheet.Cell("A1").SetValue("MS Pゴシック")
                    .Style.Font.SetFontName("MS Pゴシック") // 全角、半角の違いに注意
                    .Font.SetFontColor(XLColor.Red)
                    .Font.SetFontSize(20);

                sheet.Cell("A2").SetValue("Bold")
                    .Style.Font.SetBold(true);

                sheet.Cell("A3").SetValue("Italic")
                    .Style.Font.SetItalic(true);

                sheet.Cell("A4").SetValue("取り消し線")
                    .Style.Font.SetStrikethrough(true);

                // 下線
                sheet.Cell("A6").SetValue("下線:Double")
                    .Style.Font.SetUnderline(XLFontUnderlineValues.Double);

                sheet.Cell("A7").SetValue("下線:DoubleAccounting")
                    .Style.Font.SetUnderline(XLFontUnderlineValues.DoubleAccounting);

                sheet.Cell("A8").SetValue("下線:None")
                    .Style.Font.SetUnderline(XLFontUnderlineValues.None);

                sheet.Cell("A9").SetValue("下線:Single")
                    .Style.Font.SetUnderline(XLFontUnderlineValues.Single);

                sheet.Cell("A10").SetValue("下線:SingleAccounting")
                    .Style.Font.SetUnderline(XLFontUnderlineValues.SingleAccounting);
                
                // 文字飾り
                sheet.Cell("A12").SetValue("文字飾り:Baseline")
                    .Style.Font.SetVerticalAlignment(XLFontVerticalTextAlignmentValues.Baseline);

                sheet.Cell("A13").SetValue("文字飾り:Subscript")
                    .Style.Font.SetVerticalAlignment(XLFontVerticalTextAlignmentValues.Subscript);

                sheet.Cell("A14").SetValue("文字飾り:Superscript")
                    .Style.Font.SetVerticalAlignment(XLFontVerticalTextAlignmentValues.Superscript);

                book.SaveAs(filePath);
            }
        }
    }
}
 このコードを実行すると以下の様になります。
Font設定
 使用するフォントを変更したい場合はFontNameに使用したいフォント名を指定します。
 フォント名の全角、半角の違いに注意してください。たとえば、MS Pゴシックは全角で入力しないと無視されます。(一致するフォント名が存在していないので)
 存在しないフォント名を指定してもエラーにはなりません。
 Excelのフォント名欄には指定したフォント名が表示されますが、表示されているフォントは規定のフォント(Calibri)が使用されています。
 文字の色を変更する場合はFontColor、文字サイズの変更はFontSizeで可能です。
 BoldやItalic、Strikethrough(取り消し線)はbool値でOn/Offを指定します。

 文字に下線を引きたい場合はUnderlineプロパティに下線の種類を指定します。
 下線名にAccountingとついている場合はセルの幅に合わせて下線が引かれます。

 Font.VerticalAlignmentプロパティはプロパティ名からは解りにくいですが、「文字飾り」の設定です。
 Baselineの時は文字飾りなしです。(規定値)
 Subscriptの場合は「下付き」、Superscriptの場合は「上付き」になります。

 次回は表示形式の設定につて説明します。  

テーマ : プログラミング
ジャンル : コンピュータ

【ClosedXML】 Style.Fill

 セルの塗りつぶしはStyle.Fillで行えます。
 セルの塗りつぶし方法には、単色で塗りつぶす方法とパターンを指定する方法の2種類があります。
using ClosedXML.Excel;
using System;
using System.IO;

namespace ClosedXml07
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Book.xlsx");

            using(var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                var sheet = book.AddWorksheet("シート1");

                // 塗りつぶし
                sheet.Cell("A1").Value = "セルの塗りつぶし";
                sheet.Cell("B1").Style.Fill.BackgroundColor = XLColor.Red;

                // パターン
                sheet.Cell("A3").Value = "パターン:Red + Yellow, (MediumGray)";
                sheet.Cell("B3").Style
                    .Fill.SetPatternType(XLFillPatternValues.MediumGray)
                    .Fill.SetPatternBackgroundColor(XLColor.Red)
                    .Fill.SetPatternColor(XLColor.Yellow);

                book.SaveAs(filePath);
            }
        }
    }
}
 セルを単色で塗りつぶす場合はStyle.Fill.BackgroundColorに色を指定します。
 セルをパターンを使用して塗りつぶす場合は、パターンの種類(PatternType)、パターンの色(PatternColor)、パターンの背景色(PatternBackgroundColor)の3つを指定します。
 このサンプルコードを実行すると以下の様になります。
セルの背景色
 パターンで塗りつぶしたセルの書式設定は以下の様になっています。
パターンの書式設定
 パターンの種類による違いは以下の様になっています。
 パターンの色を「黄色」、パターンの背景色を「赤」としています。
パターンの種類
 次回はフォントの設定について説明します。

テーマ : プログラミング
ジャンル : コンピュータ

【ClosedXML】 Style.Border

 今回は罫線について説明します。
 罫線はStyle.Border以下のプロパティで指定します。
 罫線を引く際に指定するのは以下の3点です。
  1)線を引く位置(下線とか周囲とか)
  2)線の種類(実線とか点線とか)
  3)線の色
 3)の線の色のみ省略できます。(省略した場合は黒になります)
 具体的には以下のサンプルコードを参考にしてください。
using ClosedXML.Excel;
using System;
using System.IO;

namespace ClosedXml06
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Book.xlsx");

            using(var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                var sheet = book.AddWorksheet("シート1");

                // 赤い罫線(下線)を引く
                sheet.Cell("A1").Value = "赤い下線を引く";
                sheet.Cell("A1").Style.Border.BottomBorder = XLBorderStyleValues.Thin;
                sheet.Cell("A1").Style.Border.BottomBorderColor = XLColor.Red;

                // 範囲の周りに罫線を引く
                sheet.Cell("A3").Value = "OutsideBorderで罫線を引く";
                sheet.Range("A3:C5").Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
                
                // 範囲の内側に罫線を引く
                sheet.Cell("A7").Value = "InsideBorderで罫線を引く";
                sheet.Range("A7:C10").Style.Border.InsideBorder = XLBorderStyleValues.Thin;

                // 範囲に罫線を引く場合はこちらの方が早い
                sheet.Cell("A13").Value = "組み合わせて罫線を引く";
                sheet.Range("A13:C15").Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                // 斜線を引く
                sheet.Cell("A17").Style.Border.DiagonalBorder = XLBorderStyleValues.Thin;
                sheet.Cell("A17").Style.Border.DiagonalDown = true;

                sheet.Cell("A18").Style.Border.DiagonalBorder = XLBorderStyleValues.Thin;
                sheet.Cell("A18").Style.Border.DiagonalUp = true;

                book.SaveAs(filePath);
            }
        }
    }
}
 このコードを実行すると以下の様になります。
StyleBorder.png
 ClosedXMLでは罫線を引く位置を以下の様に定義しています。
  TopBorder:セルの上部
  BottomBorder:セルの下部
  LeftBorder:セルの左辺
  RightBorder:セルの右辺
  DiagonalBorder:斜線
  OutsideBorder:セル(セル範囲)の周り
  InsideBorder:セル範囲の内側
 例えば、セルの下部に線を引きたい場合は、
sheet.Cell("A1").Style.Border.BottomBorder = XLBorderStyleValues.Thin;
の様に、線を引きたい場所(BottomBorder等)に線の種類(XLBorderStyleValues.Thin)を指定します。
 同様に、線の色を指定したい場合は、
sheet.Cell("A1").Style.Border.BottomBorderColor = XLColor.Red;
の様に、線の色を指定します。
 線の色を指定しなかった場合は黒線になります。

 OutsideBorderとInsideBorderは他の罫線と少し違っていて、範囲の周り又は内側の線を引くことができます。
 この2つを組み合わせることで指定した範囲全てに罫線を引くことができますが、この2つはパフォーマンスが悪いのでTop, Bottom, Left, Rightをそれぞれ指定した方が処理速度は速くなります。
 これはOutsideBorderとInsideBorderでは線を引く箇所を調査する必要があるためだと思われます。
 表に罫線を引きたい場合はOutsideBorderとInsideBorderで2回同じような調査が必要になるので、表が大きいとかなり違ってきます。
 一々4か所(色も変えるとなると8か所)の指定をするのは面倒だと思うのであれば、範囲の罫線を引く拡張メソッドを作っておくと便利です。

 斜線を引きたい場合はDiagonalBorderに線の種類を指定するだけでは不十分です。
 DiagonalDownプロパティ、DiagonalUpプロパティで斜線を引く方向を指定する必要があります。

 最後に線の種類(XLBorderStyleValues)を紹介して罫線についての説明を終わります。
線の種類

 次回はセルの塗りつぶしについて説明します。

【ClosedXML】 Style.Alignment

 今回から複数回に分けて書式設定の方法について説明します。
 今回はAlignmentの書式設定について説明します。
 Alignmentではセル内の文字の位置や方向等を設定できます。
 以下のサンプルコードでは、色々なAlignment設定を試しています。
using ClosedXML.Excel;
using System;
using System.IO;

namespace ClosedXml05
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Book.xlsx");

            using(var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                var sheet = book.AddWorksheet("シート1");

                // 文字の横位置
                sheet.Cell("A1").Value = "中央揃え";
                sheet.Cell("A1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                // 文字の縦位置
                sheet.Cell("A2").Value = "下詰め";
                sheet.Cell("A2").Style.Alignment.Vertical = XLAlignmentVerticalValues.Bottom;

                // インデント
                sheet.Cell("A3").Value = "インデント=2";
                sheet.Cell("A3").Style.Alignment.Indent = 2;

                // 折り返して全体を表示
                sheet.Cell("A4").Value = "折り返して全体を表示";
                sheet.Cell("A4").Style.Alignment.WrapText = true;

                // 縮小して全体を表示
                sheet.Cell("A5").Value = "縮小して全体を表示";
                sheet.Cell("A5").Style.Alignment.ShrinkToFit = true;

                // 方向(角度指定)
                sheet.Cell("A6").Value = "45度";
                sheet.Cell("A6").Style.Alignment.TextRotation = 45;

                // 方向(縦方向)
                sheet.Cell("A7").Value = "縦方向";
                sheet.Cell("A7").Style.Alignment.TopToBottom = true;

                /* 複数の書式設定がある場合はメソッドを使うと便利
                 * SetValue()はIXLCellを返し、SetHorizontal()等はIXLStyleを返すので
                 * メソッドチェーンで記載できる
                 */ 
                sheet.Cell("A8")
                    .SetValue("メソッドで設定")
                    .Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                    .Alignment.SetVertical(XLAlignmentVerticalValues.Center)
                    .Alignment.SetTextRotation(45);

                book.SaveAs(filePath);
            }
        }
    }
}
 書式設定はStyleプロパティで行います。Styleプロパティ以下にサブジャンル(BorderやAlignment等)があります。
 そしてAlignmentプロパティ以下に文字の位置等を設定するためのプロパティが用意されています。
 書式設定はプロパティで設定する方法とSetメソッドを使用する方法の2種類があります。
 Setメソッドの場合は戻り値としてIXLStyleを返すので(SetValueメソッドの場合はIXLCellを返します)、そこからさらに別の書式設定を指定することができます。
 複数の書式設定を行うのであればSetメソッドを使用した方が解りやすいと思います。
 上記のサンプルコードを実行すると以下の様になります。(見やすくするためにセルの高さなどを変更しています)
StyleAlignment.png
 最後に、HorizontalとVerticalを設定するための列挙子を紹介します。
 HorizontalにはXLAlignmentHorizontalValuesを指定しますが、その値と意味は以下の通りです。
  Center:中央揃え
  CenterContinuous:選択範囲内で中央
  Distributed:均等割り付け(インデント)
  Fill:繰り返し
  General:標準
  Justify:両端揃え
  Left:左詰め(インデント)
  Right:右詰め(インデント)

 VerticalにはXLAlignmentVerticalValuesを指定します。その値と意味は以下の通りです。
  Bottom:下詰め
  Center:中央揃え
  Distributed:均等割り付け
  Justify:両端揃え
  Top:上詰め

 次回はBorder(罫線)について説明します。

テーマ : プログラミング
ジャンル : コンピュータ

カレンダー
12 | 2015/01 | 02
- - - - 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
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
04  10  11  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon