はじめに
ClosedXmlを使ってExcel出力を行っています。
出力ファイルのレイアウト変更を容易に行えるよう、テンプレートシートのセルに名前を付けてプログラムで指定しようと思います。
作ってみる
このテンプレートシートをコピーして、コピーしたシートに値を代入します。
ClosedXml
IXLWorksheet templateSheet = workbook.Worksheet("テンプレート");
IXLWorksheet worksheet = templateSheet.CopyTo("出力シート001");
worksheet.Cell("学籍番号").Value = "XXXX-YY-ZZZ";
worksheet.Cell("氏名").Value = "佐藤 太郎";
なぜだろう
ClosedXmlでコピーしたシートの名前定義を見てみると、シート範囲の定義のみがコピーされました。Excelでコピーした場合と仕様が異なるようです。
その為、テンプレートの「学籍番号」と出力シート001の「氏名」に値が入っていました。
つまり、ClosedXmlでテンプレートを使う場合はシート範囲で名前を定義する必要があります。
参考
Excelでコピーしたシートの名前の定義について