5

現在、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 セル (奇妙な浮動小数点数として格納されている) を正しい変数に変換する方法を提案できる人はいますか?

4

4 に答える 4

3

「奇妙なフロート」は、おそらくメソッドDateTimeを介して変換することもできます。DateTime.FromOADate()実際には、1900 年 1 月 1 日からの日数を分数で表したものです (例:0.04236 = 1/24 + 1/(24 * 60)午前 1 時 1 分)。

于 2013-08-21T13:15:02.110 に答える
0

日付値を double 形式または日付形式にする場合は、日付形式に変換してから、次のコードを使用してみてください。datestringvalue は入力値である必要があります。

 DateTime dateNow = DateTime.Now;
 DateTime formatedDate = DateTime.TryParse("datestringvalue", out dateNow) ? Convert.ToDateTime("datestringvalue") : DateTime.FromOADate(Convert.ToDouble("datestringvalue"));
于 2018-04-27T06:05:02.273 に答える