
Excelの勤怠データを、C#で取り込みたいです。
取り込みたいのは、
[h]:mm の形式で表示している合計勤務時間のセルです。
月の合計勤務時間なので、24時間を上回ります。
表示されているそのままの形で取り込みたいのですが、
Cells("A1").Text で取り込むと、表示されている値とは異なる値が取得されます。(下記例)
(例)
Excel「0:00」→C#「12:12」
Excel「130:00」→C#「10.01」
C#
1DateTime.FromOADate(Convert.ToDouble(Cells("A1").Value))
でDateTime型に取り込んでから何とか処理できないかと考えましたが
うまくいきません。
何か良い方法があればご教示いただけば幸いです。
補足です。
情報不足、失礼いたしました。
DateTime 型として正しい値は取れています。
Excel 表記「188:30」 シリアル値「7.85416666666666」
C# DateTime「1900/01/06 20:30:00」
ここから、「188:30」との表記へ変換する方法が分かりません。
ご教示のほどよろしくお願いいたします。

DateTime.FromOADate メソッドで正しく .NET の DateTime 型のオブジェクトを取得できないのか、DateTime 型として正しい値は取れているがそれを望む形に書式設定ができないのか、どちらですか?

どういう計算で DateTime「1900/01/06 20:30:00」が 「130:00」になるのでしょう? Microsoft のドキュメントによると "OLE オートメーション日付は、浮動小数点数として実装され、1899 年 12 月 30 日の深夜からの日数を示します" とのことですが、1899 年 12 月 30 日の深夜から数える?
大変失礼いたしました。「130:00」ではなく「188:30」です。修正いたしました。
var t = 7.85416666666666 * 24; // 188.5;
Console.WriteLine($"{Math.Floor(t)}:{Math.Floor((t - Math.Floor(t)) * 60):00}");

回答3件
あなたの回答
tips
プレビュー