現在、Excel C# ライブラリ (Microsoft.Office.Interop.Excel) を使用して、Excel スプレッドシートを C# アプリケーションに読み込んでいます。
最初にすべてのセルを生データとして読み取ろうとしましたが、日付形式のセルは 5 桁の整数を返し、時間形式のセルは 10 進数を返すことがわかりました。そこで、次のように、Excel の C# ライブラリに組み込まれている日付変換メソッドを使用できることがわかりました。
DateTime excelDate = (DateTime)ExcelCalcValue.ExcelDateToDateTime(workbook, Double.Parse(cell.Value.ToString()));
output = excelDate.ToString("yyyy-MM-dd HH:mm");
さまざまなテスト シートを使用してアプリケーションをデバッグすることで、セルがさまざまな方法で書式設定されたときに返されるさまざまな書式文字列を記録することができました。これらは以下のとおりです。
(WorksheetCell.CellFormat.FormatString)
Times
[$-F400]h:mm:ss\\ AM/PM
hh:mm:ss;@
h:mm:ss;@
[$-409]hh:mm:ss\\ AM/PM;@
[$-409]h:mm:ss\\ AM/PM;@
Dates
m/d/yy
[$-F800]dddd\\,\\ mmmm\\ dd\\,\\ yyyy
dd/mm/yyyy;@
dd/mm/yy;@
d/m/yy;@
d\\.m\\.yy;@
yyyy\\-mm\\-dd;@
[$-809]dd\\ mmmm\\ yyyy;@
[$-809]d\\ mmmm\\ yyyy;@
これらを使用して、Excel のセルの書式設定スタイルを確実に判断できるようになりました。前のコードを使用して、日付形式のセルを検出し、適切なデータを DateTime 形式で返すことができます。ただし、時間形式のセルを変換するための同等の関数が表示されません。
0.58368055555555554
としてフォーマットされたセルを読み取ると、 の結果が得られ[$-F400]h:mm:ss\\ AM/PM
ます。これを に変換する方法DateTime
、または実際にこの float が何を表しているのかまったくわかりません。
DateTime
時間形式の Excel セル (奇妙な浮動小数点数として格納されている) を正しい変数に変換する方法を提案できる人はいますか?