フォント
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つの要素から構成されています。
- “Hell”(赤色)
- “o”(赤色、下線)
- ” BIG “(青色、下線、ボールド)
- “W”(赤色、下線)
- “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 | 表示形式 |
|---|---|
| 0 | General |
| 1 | 0 |
| 2 | 0.00 |
| 3 | #,##0 |
| 4 | #,##0.00 |
| 9 | 0% |
| 10 | 0.00% |
| 11 | 0.00E+00 |
| 12 | # ?/? |
| 13 | # ??/?? |
| 14 | d/m/yyyy |
| 15 | d-mmm-yy |
| 16 | d-mmm |
| 17 | mmm-yy |
| 18 | h:mm tt |
| 19 | h:mm:ss tt |
| 20 | H:mm |
| 21 | H:mm:ss |
| 22 | m/d/yyyy H:mm |
| 37 | #,##0 ;(#,##0) |
| 38 | #,##0 ;[Red](#,##0) |
| 39 | #,##0.00;(#,##0.00) |
| 40 | #,##0.00;[Red](#,##0.00) |
| 45 | mm:ss |
| 46 | [h]:mm:ss |
| 47 | mmss.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









