.Net Interopを使用してExcelからDateTime値を取得すると、ミリ秒が欠落する
-
08-07-2019 - |
質問
.Net COM Interopを介して Range.set_value
を使用してExcelセルにDateTime値を入力し、 Range.get_value
を使用して同じセルの値を取得する場合、値のミリ秒部分は返されませんが、それ以外はすべて正しいです。
これはバグですか?
回避策は何ですか?代わりにValue2プロパティを使用すると役立つと思います。他の誰かがこれを試しましたか?
解決 2
として提案されたジョン、Range.Value2プロパティを使用して値を設定すると、DateTime.ToOADateを使用してDateTimeをdoubleに変換します(DateTime.FromOADateを使用して再び戻ります)。
このプロパティの唯一の問題は、あなたがまだ知らない場合、セルがDateTimeとして扱われることになっていることを通知しないことです。これを解決するには、2パスアプローチを使用する必要があると思います:Range.get_Valueを使用してセル値を取得し、タイプを決定してから、DateTimeセルについて、Range.Value2を使用して値を再度取得し、DateTimeを使用して変換します.FromOADate。
他のヒント
Excelでミリ秒値の日付/時刻を手動で設定した場合、それは維持されますか? Excelの内部オブジェクトモデルについては知りませんが、ミリ秒をサポートしていないことが考えられます。
編集:さて、これでセットが失敗することがわかりました(もちろん、取得も失敗する可能性があります)... DateTime.ToOADate()。希望を差し出しているとは言っていませんが、試してみる価値はあります...
このKB記事で説明されている問題が原因である可能性があります。
その場合、Value2プロパティの設定が機能するはずです。