大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Cellに日付と時刻の書式を設定する(NPOI編)

著者:杉山貴規
公開日:2019/09/18
最終更新日:2019/09/18
カテゴリー:技術情報
タグ:

株式会社クローバーフィールドの杉山です。

NPOIを使用してのセルの日付、時刻の書式設定です。

以前のCellの書式を設定する(NPOI編)で日付と時刻の書式がうまく反映できなかった件について調査した内容を報告します。

コードは下記のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;

namespace ExcelNpoi
{
    class Program
    {
        static void Main(string[] args)
        {
            String filepath = @"c:\output\npoi.xlsx";

            IWorkbook workbook = new XSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("mySheet");

            // 日付の値設定
            IRow row = sheet.CreateRow(2);
            ICellStyle dateStyle = workbook.CreateCellStyle();
            dateStyle.DataFormat = workbook.CreateDataFormat().GetFormat("yyyy/mm/dd");

            ICell cell = row.CreateCell(1);
            cell.SetCellType(CellType.Numeric);
            cell.CellStyle = dateStyle;
            cell.SetCellValue("2019/9/4");

            cell = row.CreateCell(2);
            cell.SetCellType(CellType.String);
            cell.CellStyle = dateStyle;
            cell.SetCellValue("2019/9/5");

            cell = row.CreateCell(3);
            cell.SetCellType(CellType.Numeric);
            cell.CellStyle = dateStyle;
            cell.SetCellValue(DateTime.Parse("2019/9/6"));

            // 時刻の値設定
            row = sheet.CreateRow(3);
            ICellStyle timeStyle = workbook.CreateCellStyle();
            timeStyle.DataFormat = workbook.CreateDataFormat().GetFormat("HH:mm:ss");

            cell = row.CreateCell(1);
            cell.SetCellType(CellType.Numeric);
            cell.CellStyle = timeStyle;
            cell.SetCellValue("3:16:3");

            cell = row.CreateCell(2);
            cell.SetCellType(CellType.String);
            cell.CellStyle = timeStyle;
            cell.SetCellValue("3:16:3");

            cell = row.CreateCell(3);
            cell.SetCellType(CellType.Numeric);
            cell.CellStyle = timeStyle;
            cell.SetCellValue(DateTime.Parse("3:16:4"));

            using (FileStream fs = File.Create(filepath))
            {
                workbook.Write(fs);
            }
        }
    }
}

実行結果は、下記のとおりです。

Cellに日付と時刻の書式を設定する(NPOI編)

D3, D4: 日付データ、時刻データを作成してセルの値として設定すると自動的にNumberFormtIDが設定されるようです。

他のセルについては、書式は設定されていますが、表示されている値は、書式が反映されません。ちなみに一度セルを入力状態(セルにカーソルが乗っている状態で、F2キーを押下)、Tabキー等でCellを移動すると書式が反映されます。
書式設定自体は、正しく動作しているようですが、これでは帳票作成などて使用するのは難しいです。
この動きについては、他のライブラリ(EPPlus, ClosedXML)も同様でした。

    上に戻る