Cellの書式を設定する(EPPlus編)
クローバーフィールドの杉山です。
ExcelのBookを作成してみるシリーズの続編です。
毎度のことながらブログの更新をさぼっております。
なかなかまとまった時間が作れませんでした。
と、いいますかOpenXMLについては、まだドキュメントを精査中です。
・・・いつまでも終わらん気がしますけど。
まずは解りやすいところから記事にしていきたいと思います。
今回は、EPPlusで書式設定に挑戦です。
設定する書式は、文字列、数字、日付、時刻です。
文字列(@)については以下のパターンを確認してみました。
A1 : 書式だけを設定
B1 : 書式を設定せず文字列を設定
C1 : 書式を設定せず文字列(数字)を設定
D1 : 書式を設定して文字列(数字)を設定
E1 : 書式を設定して数値を設定
数値(#,##0.0)については以下のパターンを確認してみました。
A2 : 書式だけを設定
B2 : 書式を設定して数値を設定
C2 : 書式を設定せず文字列(数字)を設定
D2 : 書式を設定して文字列を設定
日付(yyyy/mm/dd)については以下のパターンを確認してみました。
A3 : 書式だけを設定
B3 : 書式を設定して文字列(日付)を設定
C3 : 書式を設定せず文字列(日付)を設定
D3 : 書式を設定して文字列を設定
時刻(HH:mm:ss)については以下のパターンを確認してみました。
A4 : 書式だけを設定
B4 : 書式を設定して文字列(時刻)を設定
C4 : 書式を設定せず文字列(時刻)を設定
D4 : 書式を設定して文字列を設定
実行するコードは下記のとおりです。
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 54 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OfficeOpenXml; using OfficeOpenXml.Style; using System.IO; namespace ExcelEPPlus { class Program { static void Main(string[] args) { using (var p = new ExcelPackage()) { var ws = p.Workbook.Worksheets.Add("MySheet"); // 文字列の値設定 ws.Cells[1, 1].Style.Numberformat.Format = "@"; ws.Cells[1, 2].Value = "Hello, Excel!"; ws.Cells[1, 2].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; ws.Cells[1, 3].Value = "0123456789"; ws.Cells[1, 4].Style.Numberformat.Format = "@"; ws.Cells[1, 4].Value = "0123456789"; ws.Cells[1, 5].Style.Numberformat.Format = "@"; ws.Cells[1, 5].Value = 0123456789; // 数値の値設定 ws.Cells[2, 1].Style.Numberformat.Format = "#,##0.0"; ws.Cells[2, 2].Style.Numberformat.Format = "#,##0.0"; ws.Cells[2, 2].Value = 1234; ws.Cells[2, 3].Style.Numberformat.Format = "#,##0.0"; ws.Cells[2, 3].Value = "2345"; // 日付の値設定 ws.Cells[3, 1].Style.Numberformat.Format = "yyyy/mm/dd"; ws.Cells[3, 2].Style.Numberformat.Format = "yyyy/mm/dd"; ws.Cells[3, 2].Value = "2019/08/01"; ws.Cells[3, 3].Value = "2019/08/02"; ws.Cells[3, 4].Style.Numberformat.Format = "yyyy/mm/dd"; ws.Cells[3, 4].Value = "DATE"; // 時刻の値設定 ws.Cells[4, 1].Style.Numberformat.Format = "HH:mm:ss"; ws.Cells[4, 2].Style.Numberformat.Format = "HH:mm:ss"; ws.Cells[4, 2].Value = "14:15:01"; ws.Cells[4, 3].Value = "14:16:01"; ws.Cells[4, 4].Style.Numberformat.Format = "HH:mm:ss"; ws.Cells[4, 4].Value = "TIME"; p.SaveAs(new FileInfo(@"c:\output\EPPlus.xlsx")); } } } } |
実行結果は、下記のとおりです。
それぞれの書式設定の状態を確認してみました。
B1, C1 : 書式を設定せず、値に文字列を設定した場合、書式として”標準”が設定されています。納得。
D1 : 「数値が文字列として設定されている」と警告がありますが、書式に”文字列”が設定され先頭の0も表示されています。
E1 : 書式は”文字列”となっていますが先頭の0が落ちています。利用する際は要注意ですね。
A2, B2 : 書式としては通貨扱いになっています。
C2 : 書式として通貨が設定されていますが文字列扱いの表示になっています。
A3, B3 : 日付はユーザ定義の書式として正しい設定されています。
C3 : 書式は”標準”が設定されており、値は文字列扱いです。
D3 : 書式は設定されている状態で文字列がそのまま表示されています
A4, B4 : 時刻はユーザ定義の書式として正しい設定されています。
C4 : 書式に”標準”が設定されており、値は文字列扱いです。
D4 : 書式が設定されている状態で文字列がそのまま表示されています
・・・数値にするにはどないしたらええのか要調査ですね。
書式の設定するための方法として、フォーマットIDを使用するやり方もあるのですが、これはまた後程。
※2019/9/18追記 Cellに日付と時刻の書式を設定する(EPPlus編)に日付と時刻の書式設定について継続調査の内容を記載しました。
とりあえず、他のライブラリも同様の書式設定を試してみたいと思います。