【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

ワークシートのコピー

'1つ目のワークブック
Dim wb = New XLWorkbook
Dim ws = wb.AddWorksheet("Sheet1")

'Sheet1 の A1 にテキストを入力
ws.Cells("A1").Value = "(*^_^*)"

'ブック内でワークシートをコピーする
ws.CopyTo("Sheet1 のコピー")

'1つ目のワークブックを保存
wb.SaveAs("D:\test\wsCopyTest1.xlsx")



'2つ目のワークブック
Dim wb2 = New XLWorkbook
'1つ目のワークブックのワークシートを
'2つ目のワークブック内にコピーする
ws.CopyTo(wb2, "wsCopyTest1.xlsx からのコピー")

'2つ目のワークブックを保存
wb2.SaveAs("D:\test\wsCopyTest2.xlsx")

ワークシートの表示・非表示

Dim wb = New XLWorkbook

wb.Worksheets.Add("Visible")
wb.Worksheets.Add("Hidden").Hide
wb.Worksheets.Add("Unhidden").Hide.Unhide
wb.Worksheets.Add("VeryHidden").Visibility = XLWorksheetVisibility.VeryHidden

wb.SaveAs("D;\test\HideWorksheets.xlsx")

ワークシートの保護

下図のような2つのワークシートを作成します。

  • A 列で「ロック」と表示されている場合、その行の B 列のテキストを変更することができません。
  • A 列で「非表示」と表示されている場合、その行の B 列のテキストや数式が数式バーに表示されません。
Dim wb = new XLWorkbook
Dim ws = wb.Worksheets.Add("保護(パスワードなし)")

'セルの書式設定、列の挿入・削除、行の削除のみを許可
ws.Protect _ 
    .SetFormatCells _
    .SetInsertColumns _
    .SetDeleteColumns _
    .SetDeleteRows

ws.Cell("A1").SetValue("ロック、表示(デフォルト):").Style _
    .Font.SetBold.Fill.SetBackgroundColor(XLColor.Cyan)
ws.Cell("B1").SetValue("(*^▽^*)")
ws.Cell("B1").Style.Border.SetOutsideBorder(XLBorderStyleValues.Medium)

ws.Cell("A2").SetValue("ロック、非表示:").Style.Font.SetBold _
    .Fill.SetBackgroundColor(XLColor.Cyan)
ws.Cell("B2").Style.Protection.SetHidden.Border _
    .SetOutsideBorder(XLBorderStyleValues.Medium)
ws.Cell("B2").SetValue("( *´艸`)")

ws.Cell("A3").SetValue("非ロック、非表示:").Style.Font _
    .SetBold.Fill.SetBackgroundColor(XLColor.Cyan)
ws.Cell("B3").Style.Protection.SetLocked(False).Protection _
    .SetHidden.Border.SetOutsideBorder(XLBorderStyleValues.Medium)
ws.Cell("B3").SetValue("(*^-^*)")

ws.Cell("A4").SetValue("非ロック、表示:").Style.Font.SetBold _
    .Fill.SetBackgroundColor(XLColor.Cyan)
ws.Cell("B4").Style.Protection.SetLocked(False).Border _
    .SetOutsideBorder(XLBorderStyleValues.Medium)
ws.Cell("B4").SetValue("(^^♪")

'ws.Style.Font.FontName = "游ゴシック";
'ws.Columns().AdjustToContents
'コンテンツが日本語の場合は日本語フォントにしておかないと AdjustToContents が正しく動作しない
ws.Column(1).Width = 37
ws.Column(2).Width = 25

'パスワードを付けてシートを保護
Dim protectedSheet = wb.Worksheets.Add("保護(パスワードは 123)")
Dim protection = protectedSheet.Protect("123")
protection.InsertRows = True
protection.InsertColumns = True

wb.SaveAs("D:\test\SheetProtection.xlsx")

ワークシートの見出しの色

ワークシートの見出しの色を下図のように変更します。

Dim wb = new XLWorkbook

Dim wsRed = wb.Worksheets.Add("Red").SetTabColor(XLColor.Red)

Dim wsAccent3 = wb.Worksheets.Add("Accent3").SetTabColor(XLColor.FromTheme(XLThemeColor.Accent3))

Dim wsIndexed = wb.Worksheets.Add("Index")
wsIndexed.TabColor = XLColor.FromIndex(24)

Dim wsArgb = wb.Worksheets.Add("Argb")
wsArgb.TabColor = XLColor.FromArgb(23, 23, 23)

wb.SaveAs("D:\test\TabColors.xlsx")

ワークシートの追加・移動・削除

Dim workbook = New XLWorkbook

'5枚のワークシートを追加する
' --> シート順は Sheet 1, Sheet 2, Sheet 3, Sheet 4, Sheet 5
For Each wsNum As Integer in Enumerable.Range(1, 5)
    Dim ws = workbook.Worksheets.Add("Sheet " + wsNum.ToString)
Next

'最初のシートを最後に移動
' --> シート順は Sheet 2, Sheet 3, Sheet 4, Sheet 5, Sheet 1
workbook.Worksheet(1).Position = workbook.Worksheets.Count + 1

'4番目のワークシートを削除
' --> シート順は Sheet 2, Sheet 3, Sheet 4, Sheet 1
workbook.Worksheet(4).Delete

'1番目と2番目のシートの位置を入れ替える()
' --> シート順は Sheet 3, Sheet 2, Sheet 4, Sheet 1
workbook.Worksheet(2).Position = 1

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

ウィンドウ枠の固定

Dim wb = new XLWorkbook
Dim wsFreeze = wb.Worksheets.Add("ウィンドウ枠の固定")

'行と列を同時に固定
wsFreeze.SheetView.Freeze(3, 5)

'行と列を別々に固定することもできます
'wsFreeze.SheetView.FreezeRows(3)
'wsFreeze.SheetView.FreezeColumns(5)

'固定を解除
'wsFreeze.SheetView.Freeze(0, 0)



'SplitRow / SplitColumn でもできます
'wsFreeze.SheetView.SplitRow = 3
'wsFreeze.SheetView.SplitColumn = 5

'固定を解除
'wsFreeze.SheetView.SplitRow = 0
'wsFreeze.SheetView.SplitColumn = 0

wb.SaveAs("D:\test\FreezePanes.xlsx")

アウトラインの作成

下図のようなアウトラインを作成します。

 

コード

Dim wb = new XLWorkbook
Dim ws = wb.Worksheets.Add("アウトライン")

ws.Outline.SummaryHLocation = XLOutlineSummaryHLocation.Right
ws.Columns(2, 6).Group '列 2-6(B-F) のアウトライン(レベル1)を作成
ws.Columns(2, 4).Group '列 2-4(B-D) のアウトライン(レベル2)を作成
ws.Column(2).Ungroup(True) '列2をすべてのアウトラインから外す

ws.Outline.SummaryVLocation = XLOutlineSummaryVLocation.Bottom
ws.Rows(1, 5).Group '行 1-5 のアウトライン(レベル1)を作成
ws.Rows(1, 4).Group '行 1-4 のアウトライン(レベル2)を作成
ws.Rows(1, 4).Collapse '行 1-4 を折りたたむ
ws.Rows(1, 2).Group '行 1-2 のアウトライン(レベル3)を作成
ws.Rows(1, 2).Ungroup '行 1-2 を最後のアウトラインから外す

'特定のアウトラインレベルを折りたたんだり展開したりすることもできます
'
' ws.CollapseRows(outlineLevel As Int32)
' ws.CollapseColumns(outlineLevel As Int32)
'
' ws.ExpandRows(outlineLevel As Int32)
' ws.ExpandColumns(outlineLevel As Int32)

'すべてのアウトラインレベルを一度に折りたたんだり展開したりすることもできます
'
' ws.CollapseRows
' ws.CollapseColumns
'
' ws.ExpandRows
' ws.ExpandColumns

wb.SaveAs("D:\test\Outline.xlsx")

 

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

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