【VB.NET】ClosedXML:セルの書式

MEMO
  • この記事は GitHub - ClosedXML - Wiki を参考に書かせていただいたものですが、C# から VB.NET への書き換えをし、英語から日本語へ翻訳しただけでなく、元記事の構成・コード・コメント等を変更している場合もありますのでご了承ください。
  • 現在 ClosedXML のメンテナンスをご担当されている Francois Botha 様からの掲載許可もいただいてます。
  • この記事のコードサンプルについては、Imports ClosedXML.Excel が宣言されていることを前提としています。
  • ClosedXML の作成者について:Francois Botha, Aleksei Pankratev, Manuel de Leon, Amir Ghezelbash
  • ClosedXML のライセンスについて:GitHub - ClosedXML - MIT License

フォント

Dim workbook = new XLWorkbook
Dim ws = workbook.Worksheets.Add("フォント")

Dim co = 2
Dim ro = 1

ro += 1
ws.Cell(ro, co).Value = "Bold"
ws.Cell(ro, co).Style.Font.Bold = True

ro += 1
ws.Cell(ro, co).Value = "FontColor - Red"
ws.Cell(ro, co).Style.Font.FontColor = XLColor.Red

ro += 1
ws.Cell(ro, co).Value = "FontFamilyNumbering - Script"
ws.Cell(ro, co).Style.Font.FontFamilyNumbering = XLFontFamilyNumberingValues.Script

ro += 1
ws.Cell(ro, co).Value = "FontName - Stencil"
ws.Cell(ro, co).Style.Font.FontName = "Stencil"

ro += 1
ws.Cell(ro, co).Value = "FontSize - 15"
ws.Cell(ro, co).Style.Font.FontSize = 15

ro += 1
ws.Cell(ro, co).Value = "Italic - True"
ws.Cell(ro, co).Style.Font.Italic = True

ro += 1
ws.Cell(ro, co).Value = "Shadow - True"
ws.Cell(ro, co).Style.Font.Shadow = True

ro += 1
ws.Cell(ro, co).Value = "Strikethrough - True"
ws.Cell(ro, co).Style.Font.Strikethrough = True

ro += 1
ws.Cell(ro, co).Value = "Underline - Double"
ws.Cell(ro, co).Style.Font.Underline = XLFontUnderlineValues.Double

ro += 1
ws.Cell(ro, co).Value = "VerticalAlignment = Superscript"
ws.Cell(ro, co).Style.Font.VerticalAlignment = XLFontVerticalTextAlignmentValues.Superscript

ws.Column(co).AdjustToContents

workbook.SaveAs("D:\test\StylesFont.xlsx")

塗りつぶし(背景色)

セルの塗りつぶし(背景色)

Dim workbook = New XLWorkbook
Dim ws = workbook.Worksheets.Add("Style Fill")

Dim co = 2
Dim ro = 1

ws.Cell(ro, co).Style.Fill.BackgroundColor = XLColor.Red
ws.Cell(ro, co).CellRight.Value = "BackgroundColor=Red"

ro += 1
ws.Cell(ro, co).Style.Fill.PatternType = XLFillPatternValues.DarkTrellis
ws.Cell(ro, co).Style.Fill.PatternColor = XLColor.Orange
ws.Cell(ro, co).Style.Fill.BackgroundColor = XLColor.Blue
ws.Cell(ro, co).CellRight.Value = "PatternType=DarkTrellis; PatternColor=Orange; BackgroundColor=Blue"

workbook.SaveAs("D:\test\Styles_Fill.xlsx")

 

行全体、列全体の塗りつぶし(背景色)

ws.Row(6).Style.Fill.BackgroundColor = XLColor.Brown
ws.Rows(2, 3).Style.Fill.BackgroundColor = XLColor.Blue
ws.Column("E").Style.Fill.BackgroundColor = XLColor.Gray
ws.Columns(3, 4).Style.Fill.BackgroundColor = XLColor.Orange

カラー

カラーの様々な指定方法。

'Known color
ws.Cell(1, 1).Style.Fill.BackgroundColor = XLColor.Red

'FromArgb(16進で指定)
ws.Cell(2, 1).Style.Fill.BackgroundColor = XLColor.FromArgb(&HFF00FF)

'FromArgb(整数で指定)
ws.Cell(3, 1).Style.Fill.BackgroundColor = XLColor.FromArgb(16711935)

'FromArgb(r, g, b)
ws.Cell(4, 1).Style.Fill.BackgroundColor = XLColor.FromArgb(255, 0, 255)

'FromArgb(a, r, g, b)
'注意:Excel では alpha 値が無視されます
ws.Cell(5, 1).Style.Fill.BackgroundColor = XLColor.FromArgb(0, 255, 0, 255)

'FromColor(Color)
ws.Cell(6, 1).Style.Fill.BackgroundColor = XLColor.FromColor(Color.Red)

'FromHtml(htmlColor)
ws.Cell(7, 1).Style.Fill.BackgroundColor = XLColor.FromHtml("#FF996515")

'FromIndex(indexedColor)
ws.Cell(8, 1).Style.Fill.BackgroundColor = XLColor.FromIndex(25)

'FromKnownColor(KnownColor)
ws.Cell(9, 1).Style.Fill.BackgroundColor = XLColor.FromKnownColor(KnownColor.Plum)

'FromName(colorName)
ws.Cell(10, 1).Style.Fill.BackgroundColor = XLColor.FromName("PowderBlue")


'From Theme color
ws.Cell(11, 1).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1)

'From Theme color(色合いを指定)
ws.Cell(12, 1).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1, 0.5)

(参考)GitHub - ClosedXML - ClosedXML の定義済みカラー

(参考)GitHub - ClosedXML - Excel のインデックスカラー

リッチテキスト(RichText)の操作

まずセルにテキストを入力します。

Dim cell1 = ws.Cell(1, 1).SetValue("The show must go on...")

セルのテキスト全体を青色にし、その後で "show" を赤色にしてフォントを "Broadway" に変更します。

'セルのテキスト全体を青色に
cell1.Style.Font.FontColor = XLColor.Blue
' "show" の色とフォントを変更
cell1.RichText.Substring(4, 4) _
    .SetFontColor(XLColor.Red) _
    .SetFontName("Broadway")

別のセルに対して、テキストの入力と装飾を同時に行います。

Dim cell2 = ws.Cell(3, 1)

cell2.RichText _
  .AddText("Hello").SetFontColor(XLColor.Red) _
  .AddText(" BIG ").SetFontColor(XLColor.Blue).SetBold _
  .AddText("World").SetFontColor(XLColor.Red)

入力したのは3つの単語ですが、一続きの文字列として処理できます。

cell2.RichText.Substring(4, 7).SetUnderline '下線を付ける

現在、上図の A3 セルの RichText は次の5つの要素から構成されています。

  1. "Hell"(赤色)
  2. "o"(赤色、下線)
  3. " BIG "(青色、下線、ボールド)
  4. "W"(赤色、下線)
  5. "orld"(赤色)

次のコードでこれを確認できます。

Dim row As Integer = 3
For Each richText In cell2.RichText
    If richText.FontColor = XLColor.Red Then
        ws.Cell(row, 2).Value = $"""{richText.Text}"" は赤色"
        row += 1
    End If
    If richText.FontColor = XLColor.Blue Then
        ws.Cell(row, 2).Value = $"""{richText.Text}"" は青色"
        row += 1
    End If
    If richText.Underline = XLFontUnderlineValues.Single Then
        ws.Cell(row, 2).Value = $"""{richText.Text}"" は下線付き"
        row += 1
    End If
    If richText.Bold Then
        ws.Cell(row, 2).Value = $"""{richText.Text}"" はボールド"
        row += 1
    End If
Next

数字の表示形式

Dim workbook = new XLWorkbook
Dim ws = workbook.Worksheets.Add("Style NumberFormat")

Dim co = 2
Dim ro = 1

'カスタムの書式
ro += 1
ws.Cell(ro, co).Value = "123456.789"
ws.Cell(ro, co).Style.NumberFormat.Format = "$ #,##0.00"

ro += 1
ws.Cell(ro, co).Value = "12.345"
ws.Cell(ro, co).Style.NumberFormat.Format = "0000"

'OpenXML の定義済み書式 (.NumberFormatId)
ro += 1
ws.Cell(ro, co).Value = "12.345"
ws.Cell(ro, co).Style.NumberFormat.NumberFormatId = 3

'XLPredefinedFormat 列挙型
ro += 1
ws.Cell(ro, co).Value = "123456789123"
ws.Cell(ro, co).Style.NumberFormat.SetNumberFormatId(XLPredefinedFormat.Number.Integer)

ws.Column(co).AdjustToContents

workbook.SaveAs("D:\test\StylesNumberFormat.xlsx")

NumberFormatId に指定できる ID の一覧については「NumberFormatId の ID 一覧」を参照してください。

NumberFormatId の ID 一覧

OpenXML では日付と数値についての定義済み書式が用意されており、.NumberFormatId にその ID を指定することができます。

range.Style.NumberFormat.NumberFormatId = 2

実際に表示されるテキストはその環境のカルチャに影響される点に注意してください。たとえば NumberFormatId = 2 の場合、カルチャが JP(日本)の環境では小数点がドットになりますが、カルチャが DE(ドイツ)の環境ではカンマになります。

ID表示形式
0General
10
20.00
3#,##0
4#,##0.00
90%
100.00%
110.00E+00
12# ?/?
13# ??/??
14d/m/yyyy
15d-mmm-yy
16d-mmm
17mmm-yy
18h:mm tt
19h:mm:ss tt
20H:mm
21H:mm:ss
22m/d/yyyy H:mm
37#,##0 ;(#,##0)
38#,##0 ;[Red](#,##0)
39#,##0.00;(#,##0.00)
40#,##0.00;[Red](#,##0.00)
45mm:ss
46[h]:mm:ss
47mmss.0
48##0.0E+0
49@

配置(アラインメント)

ws.Cell("A1").SetValue("右揃え・下揃え").Style _
    .Alignment.SetVertical(XLAlignmentVerticalValues.Bottom) _
    .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Right)

罫線

Dim workbook = new XLWorkbook
Dim ws = workbook.Worksheets.Add("罫線")

Dim co = 2
Dim ro = 1

ro += 1
ws.Cell(ro, co).Value = "LeftBorder=Thick; LeftBorderColor=Blue; BottomBorder=Thick; BottomBorderColor=Red"
ws.Cell(ro, co).Style.Border.LeftBorder = XLBorderStyleValues.Thick
ws.Cell(ro, co).Style.Border.LeftBorderColor = XLColor.Blue
ws.Cell(ro, co).Style.Border.BottomBorder = XLBorderStyleValues.Thick
ws.Cell(ro, co).Style.Border.BottomBorderColor = XLColor.Red

ro += 2
ws.Cell(ro, co).Value = "DiagonalBorder=Thin; DiagonalBorderColor=Red; DiagonalUp=True; DiagonalDown=True"
ws.Cell(ro, co).Style.Border.DiagonalBorder = XLBorderStyleValues.Thin
ws.Cell(ro, co).Style.Border.DiagonalBorderColor = XLColor.Red
ws.Cell(ro, co).Style.Border.DiagonalUp = True
ws.Cell(ro, co).Style.Border.DiagonalDown = True

ro += 2
Dim rng = ws.Range(ro, co, ro+1, co+1)
ws.Cell(ro, co).Value = "OutsideBorder=Double;"
ws.Cell(ro, co).CellRight.Value = "InsideBorder=Thin;"
ws.Cell(ro, co).CellBelow.Value = "OutsideBorderColor=Brown"
ws.Cell(ro, co).CellBelow.CellRight.Value = "InsideBorderColor=Green"
rng.Style.Border.OutsideBorder = XLBorderStyleValues.Double
rng.Style.Border.OutsideBorderColor = XLColor.Brown
rng.Style.Border.InsideBorder = XLBorderStyleValues.Thin
rng.Style.Border.InsideBorderColor = XLColor.Green

workbook.SaveAs("D:\test\StylesBorder.xlsx")

 

セルの書式を初期化する

セルの書式をデフォルトのスタイルに設定します。

ws.Cell(2, 1).Style = XLWorkbook.DefaultStyle

 

「【VB.NET】ClosedXML の使い方」の一覧を表示

購読する
通知を受け取る対象
guest
0 Comments
Inline Feedbacks
View all comments