Cellの書式を設定する(ClosedXML編)
クローバーフィールドの杉山です。
ExcelのBookを作成してみるシリーズのClosedXML編です。
Bookを作成した際は非常に扱いやすい印象をうけたClsoedXMLで書式を設定してみます。
前回のCellの書式を設定する(EPPlus編)と同等の内容で書式などの設定状況を確認してみます。
ちなみにF1, G1については書式の設定方法の別パターンを試してみました。
実行するコードは下記のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ClosedXML.Excel; namespace ExcelClosedXML { class Program { static void Main(string[] args) { String filepath = @"c:\output\ClosedXML.xlsx"; var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("mySheet"); // 文字列の値設定 worksheet.Cell("A1").Style.NumberFormat.Format = "@"; worksheet.Cell("B1").Value = "Hello, Excel!"; worksheet.Cell("B1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; worksheet.Cell("C1").Value = "0123456789"; worksheet.Cell("D1").Style.NumberFormat.Format = "@"; worksheet.Cell("D1").Value = "0123456789"; worksheet.Cell("E1").Style.NumberFormat.Format = "@"; worksheet.Cell("E1").Value = 0123456789; worksheet.Cell("F1").SetValue("0123456789").Style.NumberFormat.SetFormat("@"); worksheet.Cell("G1").SetValue(0123456789).Style.NumberFormat.SetFormat("@"); // 数値の値設定 worksheet.Cell("A2").Style.NumberFormat.Format = "#,##0.0"; ; worksheet.Cell("B2").Style.NumberFormat.Format = "#,##0.0"; ; worksheet.Cell("B2").Value = 1234; worksheet.Cell("C2").Style.NumberFormat.Format = "#,##0.0"; ; worksheet.Cell("C2").Value = "2345"; // 日付の値設定 worksheet.Cell("A3").Style.NumberFormat.Format = "yyyy/mm/dd"; ; worksheet.Cell("B3").Style.NumberFormat.Format = "yyyy/mm/dd"; ; worksheet.Cell("B3").Value = "2017/08/01"; worksheet.Cell("C3").Value = "2017/08/02"; worksheet.Cell("D3").Style.NumberFormat.Format = "yyyy/mm/dd"; ; worksheet.Cell("D3").Value = "DATE"; // 時刻の値設定 worksheet.Cell("A4").Style.NumberFormat.Format = "HH:mm:ss"; ; worksheet.Cell("B4").Style.NumberFormat.Format = "HH:mm:ss"; ; worksheet.Cell("B4").Value = "13:14:01"; worksheet.Cell("C4").Value = "13:15:01"; worksheet.Cell("D4").Style.NumberFormat.Format = "HH:mm:ss"; ; worksheet.Cell("D4").Value = "TIME"; workbook.SaveAs(filepath); } } } |
実行結果は、下記のとおりです。
EPPlusと同様に書式に数値を設定する想定でしたが、実際の書式は”通貨”になっています。
数値の設定については、掘り下げて調査しておく必要があります。
日付、時刻とも”ユーザ定義”の書式として正しく動作しています。
C1の文字列として数値を設定した場合の動作がEPPLusと異なります。
書式として”標準”が設定されるのですが、1文字目の”0″が消えています。
文字列として扱いたい場合は、文字列の書式”@”を設定しておく必要があります。
C3の日付形式の文字列を設定した場合、EPPlusでは書式が”文字列”になっていましたが、ClosedXMLでは日付の初期が設定されています。
文字列として設定する場合、あえて書式として文字列の書式”@”を設定しておく必要があります。
D3, D4に書式とは異なる値(文字列)を設定してみましたが、特にエラーなどにならずに表示されました。
※2019/9/12追記 Cellに日付と時刻の書式を設定する(ClosedXml編)に日付と時刻の書式設定について継続調査の内容を記載しました。
次回は、NPOIで書式を設定したいと思います。