1

Excelスプレッドシートを指定したユーザーの列のデータ型を知る必要があるいくつかの機能に取り組んでいます。これらのスプレッドシートにはさまざまな形式があり、最初の行が列の名前である以外に標準形式はありません。私が抱えている問題は、整数と DateTime 列を区別できることです。現在、次の関数を使用して、セルが DateTime セルかどうかを判断しています。

 private bool isOADate(double Val)
 {
     try
     {
         DateTime dt = DateTime.FromOADate(Val);
         return true;
     }
     catch (ArgumentException)
     {
         return false;    
     }
 }

ただし、セルに 1、2、3 などがある場合、これらを 1899/12/31 12:00:00 AM、1900/01/01 12:00:00 AM に変換できるため、この関数は true を返します。 1900/01/02 12:00:00 AM それぞれ。セルの DateTime データ型を決定するより良い方法はありますか? または、それらを区別するために、現在の機能の改善を提案できますか?

4

3 に答える 3

3

VBA関数Isdate()は、セル形式もチェックします。27/01/2012を与えるTrueと、それに相当する整数の結果40935はですFalse

于 2013-01-02T14:33:40.477 に答える
2

Excel のすべてのセルには、数式、テキスト文字列、または倍精度数値が含まれています。

日付/時刻は単なる数値であるため、2013 年 1 月 2 日の 11:02 は 41276.45972 となり、1899 年 12 月 31 日からの日数を表します (1900 年がうるう年であると信じていた古い Lotus 123 エラーが組み込まれています)。

したがって、ワークシートの特定のコンテキストについて何も知らずに、セルに日付値が含まれていることを確認する方法はありません。

日付が特定の範囲内に収まることがわかっている場合 (特に、少なくとも下限を定義できる場合が多い)、関数を拡張して最小値をテストできます。

さらに、セル自体への参照を操作でき、日付/時刻を表す値を含むセルが適切にフォーマットされることがわかっている場合は、NumberFormat日付/時刻関連のプロパティをテストできます (ただし、これはすぐに複雑になる可能性があります)。カスタム形式が使用されている場合)。

于 2013-01-02T11:09:24.353 に答える
-1

Excel は日付時刻を整数として格納します。他のコンテキストがないと、整数と日時を区別できません。ユーザーが列を日時として指定していない限り。その場合、.numberformat を読み取り、そこから列の型を推測できます。

于 2013-01-02T09:53:57.417 に答える