フォント
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