自分用メモ。
他人が作成したExcelデータを受け取ってみると予想外の書式設定が多く、すべての書式設定に対応したいとソースをいじり始めたのがはじまり。
string value = sheet.Cell(i, j).GetString();
string value = sheet.Cell(i, j).GetFormattedString();
GetString() だけだと数値または日付が読み込めない現象
GetFormattedString() だけだと文字列が読み込まれない現象
…が起こったので以下のようなソースにしたらなんとなくうまくいった。
読み込まれない…とは、プログラムに空欄だと認識されてしまうこと。
memo.cs
IXLCell cell = sheet.Cell(i, j); //読み込みたいセルを定義
string value = "";
switch (cell.DataType) //読み込みたいセルのデータ型で分岐
{
case XLDataType.Number: //数値
value = sheet.Cell(i, j).GetFormattedString();
break;
case XLDataType.DateTime: //日付
DateTime dt = sheet.Cell(i, j).GetDateTime();
value = dt.ToString("yyyyMMdd");
break;
case XLDataType.Text: //文字列
value = sheet.Cell(i, j).GetString();
break;
}
もう数値もすべて文字列として受け取って、必要ならプログラムのほうでキャストすることにした。
2018/06/15追記
セルのデータタイプがDatetimeだったらDatetime型でとって、文字列にする処理を追加。
セル書式設定の日付が、西暦ならこれで問題ない。
が、セル書式設定の日付が和暦表示だとNumberだと認識してしまうらしい。
このNumberがシリアル値だと判断できない場合、セルの書式設定で和暦は使わないでほしいと周知しなきゃダメだなあ…