【VB.NET】ClosedXML:テーブルの作成(3)

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 wb = new XLWorkbook
Dim ws = wb.Worksheets.Add("顔文字")
 
'テーブルを作成
Dim dataList = New List(Of String())
dataList.Add(New String() {"平静", "スマイル", "狼狽", "哀しみ", "怒り"})
dataList.Add(New String() {"(*´ω`*)", "(*^_^*)", "(;^ω^)", "( ;∀;)", "(# ゚Д゚)"})
dataList.Add(New String() {"(・_・)", "(*^▽^*)", "(~_~;)", "(T_T)", "(; ・`д・´)"})
ws.Cell("B2").Value = dataList 'シートにデータを挿入

'シート上のデータ範囲を取得
Dim range = ws.Range(ws.FirstCellUsed, ws.LastCellUsed)

'取得したデータ範囲をテーブルとして自動的に装飾して IXLTable を返す。
Dim orgTable = range.CreateTable 'テーブル名(名前付き範囲)は "Table1" になる。
'シート上にテーブルを作成したくない場合は range.AsTable を使用して
'テーブルとして範囲を操作することもできます。



'2つ目のテーブルを作成し、最初のテーブルのヘッダーを全てコピーする
Dim SecondTblStartColNum As Int32 = orgTable.LastColumn.ColumnNumber + 2
Dim currentRow As Int32 = orgTable.FirstCell.WorksheetRow.RowNumber
Dim secondTblTitle As String = "ヘッダ一覧"
ws.Cell(currentRow, SecondTblStartColNum).Value = secondTblTitle
For Each cell In orgTable.HeadersRow.Cells
  currentRow += 1
  ws.Cell(currentRow, SecondTblStartColNum).Value = cell.Value
Next

Dim secondTblFirstCell = ws.Cell(orgTable.FirstCell.WorksheetRow.RowNumber, SecondTblStartColNum)
Dim secondTblLastCell = ws.Cell(currentRow, SecondTblStartColNum)
'テーブルを作成して IXLTable を取得。 'テーブル名(名前付き範囲)は "ヘッダデータ" になる。
Dim secondTable = ws.Range(secondTblFirstCell, secondTblLastCell).CreateTable("ヘッダデータ")
'テーブルのデザインを変える
secondTable.Theme = XLTableTheme.TableStyleLight10
'列タイトルにオートフィルターは付けない
secondTable.ShowAutoFilter = False

'2つ目のテーブルにカスタムの式を追加
secondTable.ShowTotalsRow = True
secondTable.Field(0).TotalsRowFormulaA1 = "CONCATENATE(""合計:"", CountA([" & secondTblTitle & "]))"



'3つ目のテーブルを作成し、最初のテーブルの顔文字の一部をコピーする
Dim ThirdTblStartColNum As Int32 = SecondTblStartColNum + 2
currentRow = orgTable.RangeAddress.FirstAddress.RowNumber 'currentRow をリセット
ws.Cell(currentRow, ThirdTblStartColNum).Value = "平静&スマイル"
For Each row In orgTable.DataRange.Rows
  currentRow += 1
  Dim kao1 = row.Field("平静").GetString 'フィールド名を使ってセルにアクセス
  Dim kao2 = row.Field("スマイル").GetString 'フィールド名を使ってセルにアクセス
  Dim kaokao = String.Format("{0} {1}", kao1, kao2)
  ws.Cell(currentRow, ThirdTblStartColNum).Value = kaokao
Next

Dim ThirdTblFirstCell = ws.Cell(orgTable.RangeAddress.FirstAddress.RowNumber, ThirdTblStartColNum)
Dim ThirdTblLastCell = ws.Cell(currentRow, ThirdTblStartColNum)
'テーブルを作成して IXLTable を取得。 'テーブル名(名前付き範囲)は "Table2" になる。
Dim thirdTable = ws.Range(ThirdTblFirstCell, ThirdTblLastCell).CreateTable
'テーブルのデザインを変える
thirdTable.Theme = XLTableTheme.TableStyleLight12
'列タイトルにオートフィルターは付けない
thirdTable.ShowAutoFilter = False



'コンテンツに合わせて列幅を調整
'コンテンツが日本語の場合は日本語フォントにしておかないと AdjustToContents が正しく動作しない
ws.Style.Font.FontName = "游ゴシック";
ws.Columns.AdjustToContents
'複数の列幅を設定
ws.Columns("A,G,I").Width = 3

wb.SaveAs("C:\test\KaoTables.xlsx")

 

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

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