目的
C# + ClosedXML で、Excelのデータを読み取って、DBへレコードとしてINSERTしたいのですが、
不明なフィールドは null を入れたいと考えています。
※下記の画像でいうと、[C2]・[D2]が不明なフィールド。
_
元データ(画像)
_
現在の問題
Excelの空白セルデータを、nullに変換出来ません。
以下のコードを実行すると・・・
C#
1using System; 2using ClosedXML.Excel; 3 4class Program 5{ 6 static void Main(string[] args) 7 { 8 using (var book = new XLWorkbook("BOOK.xlsx")) 9 { 10 IXLWorksheet ws1 = book.Worksheet("Sheet1"); 11 12 for (int i = 2; i < ws1.LastRowUsed().RowNumber(); i++) 13 { 14 var person = new Person(); 15 16 person.FirstName = ws1.Cell($"A{i}").GetValue<string>(); 17 person.FamilyName = ws1.Cell($"B{i}").GetValue<string>(); 18 person.Age = ws1.Cell($"C{i}").GetValue<int?>(); 19 person.LastClockInTime = ws1.Cell($"D{i}").GetValue<DateTime?>(); 20 } 21 } 22 } 23} 24 25 26class Person 27{ 28 public string FirstName { get; set; } 29 public string FamilyName { get; set; } 30 //年齢と最終出勤時刻はnullの可能性がある為、null許容型にしています。 31 public int? Age { get; set; } 32 public DateTime? LastClockInTime { get; set; } 33}
結果
以下のように、[C2]セルのデータをnullに変換出来ないようです。
ハンドルされていない例外: System.FormatException: Cannot convert Sheet1!C2's value to System.Nullable`1[System.Int32] 場所 ClosedXML.Excel.XLCell.GetValue[T]() 場所 C:\projects\closedxml\ClosedXML\Excel\Cells\XLCell.cs:行 360 場所 Program.Main(String[] args) 場所 D:\Projects\ConsoleApp1\ConsoleApp1\Program.cs:行 22
どうすれば、Excel の空白セルデータを、C# の null データとして取得出来ますでしょうか?
#追記
DBに追加する際は、2行目を例にとると、以下のようなINSERT文が生成されるようにしたいです。
SQL
1INSERT INTO 2 persons(first_name, family_name, age, last_clock_in_time) 3VALUES 4 ('支倉','未起隆', null, null);

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。