【C# NPOI】Excelをプログラムで処理したい(2)

C#

前回に引き続き、Excelを操作できるC#ライブラリ「NPOI」を使い方を解説していきます。今回はExcelファイルの新規作成、セルの書式設定について扱います。

Excelファイルの新規作成

まずは以下のソースコードを見てください。

// 空のExcelファイルを新規作成
static void CreateBlankExcelFile()
{
  // ファイルの出力パス(今回は実行環境のカレントディレクトリを指定)
  // C直下などを指定した場合は、WindowsのUAC(User Account Control)の関係で
  // ファイルが出力できないことがあるので注意
  var filePath = System.Environment.CurrentDirectory + "\\OutputTest.xlsx";

  // Excelファイル(book)の作成 
 var book = new XSSFWorkbook(); 

 // Excelファイル(book)のシートを作成
  var sheet = book.CreateSheet("test"); 

  //Excelファイル(book)を出力 
  using (var fs = new FileStream(filePath, FileMode.Create)) 
  {
    book.Write(fs); 
  }
}

Excelファイルの新規作成をするだけならこれだけです。この関数を実行すると実行ファイル(.exe)と同じディレクトリにOutputTest.xlsxという名前でExcelファイルが出力されていると思います。(※実行ファイルの場所: bin -> Release -> netcoreapp3.1-> ***.exe)

セルの値を設定

次はこのファイルに値を出力してみようと思います。以下のコードを追加します。

// Excelファイル(book)のシートを作成
var sheet = book.CreateSheet("test");

// 1行目に行を作る
var row = sheet.CreateRow(0);

// 1行目・1列目に行を作る
var cell = row.CreateCell(0);

// 値を設定
cell.SetCellValue(100);

このようにCreateRow(行番号)で、指定した行に行を作って、その行に対し、CreateCell(列番号)をすることで任意の行・列のセルを作成することができます。ただし、いずれも番号が0始まりなので気を付けてください。(例:Excelの1行目=番号0)以下のように自分で変換する関数を作ってもいいかもしれません。値を設定する場合はSetCellValue(値)で設定できます。

static ICell MyCreateCell(ISheet sheet, int rowIndex, int columnIndex)
{
    ICell ret = null;
    // 内部的に変換しておく
    rowIndex--;
    columnIndex--;
    var row = sheet.GetRow(rowIndex);
    if (row == null)
    {
        var newRow = sheet.CreateRow(rowIndex);
        ret = newRow.CreateCell(columnIndex);
    }
    else
    {
        var cell = row.GetCell(columnIndex);
        if (cell == null)
        {
            ret = row.CreateCell(columnIndex);
        }
        else
        {
            ret = cell;
        }
    }
    return ret;
}

セルの書式設定

以下によく使う書式設定を紹介します。using NPOI.HSSF.Utilを追加します。

  • 列の幅を変更する
// 1列目を10文字分の幅に変更
sheet.SetColumnWidth(0, 256 * 10);
  • 背景色を設定する
var style = book.CreateCellStyle();
style.FillBackgroundColor = HSSFColor.SkyBlue.Index;
cell.CellStyle = style;
  • 太字、イタリック体にする
var style = book.CreateCellStyle();
var font = book.CreateFont();
font.IsBold = true;         // 太字
font.IsItalic = true;         // イタリック
style.SetFont(font);
cell.CellStyle = style;
  • 罫線をかける
var style = book.CreateCellStyle();
style.BorderTop = BorderStyle.Thin;
style.BorderRight = BorderStyle.Thin;
style.BorderLeft = BorderStyle.Thin;
style.BorderBottom = BorderStyle.Thin;
cell.CellStyle = style;

その他の設定

上記以外で使う設定機能をいくつか紹介して終わりにします。自分で使うものが増えたら追記してきます。

HSSF/XSSFWorkbook

シートの複製 : Isheet CloneSheet(int sheetIndex)

// Excelファイル(book)の作成
var book = new XSSFWorkbook();

// Excelファイル(book)のシートを作成
var src = book.CreateSheet("source");
var target = book.CreateSheet("target");

// シートの複製
int sheetIndex = book.GetSheetIndex("source");
target = book.CloneSheet(sheetIndex);

コメント

タイトルとURLをコピーしました