2016-06-27 5 views
0

私はExcelのワークブックで作業している状況があり、そのセルで作業を行うために日付が入っている各セルを特定したいと思います。日付は列になっていますが、私が読んだことから、使用されている範囲全体を把握してセルをチェックするほうが簡単なようです。残念ながら、私が見つけたのは、いったん細胞があれば、その細胞内に日付を検出できないということです。ここで私が使用している方法の内容は次のとおりです。C#でExcelの範囲での操作の日付を見つける

Excel.Worksheet sheet = (Excel.Worksheet)oWB.ActiveSheet; 
Excel.Range range = sheet.UsedRange; 
//get an array of values from the cells 
System.Array cellvals = (System.Array)range.Cells.Value2; 
//go through each 
foreach(object obj in cellvals) 
{ 
    //is it a datetime? 
    DateTime testdt = new DateTime(); 
    double holder = 0.00; 
    if (double.TryParse(obj.ToString(),out holder)) 
    { 
     bool test = DateTime.TryParse(holder.ToString(), out testdt); 
     if (test) 
     { 
      //check it against litmus test 
      Console.WriteLine("Hit"); 
     } 
    } 
} 

私は私のテストデータで日付の列を持っているにもかかわらず、if(test)条件が入力されることはありません。ここでは日付列内の文字列のうちの一つの例は次のとおりです。

01/08/2007 14:50:50.42

私がオンライン発見したものの大部分は非常に具体的な日付文字列を見つけることについてあった、とだけでなく、一般的にさかのぼりました。私は、誰かがなぜ私が期待どおりその条件に当てられていないのかを見つけるのを助けることができるかもしれないことを望んでいました。

+0

'DateTime testdt = new DateTime();'デバッガを使用していますか? foreachループ内でDateTimeの新しいインスタンスを作成しているからです。セルに日付フィールドがある場合は、CellvalsのどのフィールドがDateTimeフィールドであるかを知る必要があります。なぜこの行が決してヒットしないのかは明らかです。あなたのコードのデバッグとブレークポイントの設定から始めてください。 – MethodMan

答えて

1

上記のアプローチを使用すると、ダブルを含むセルと、実際の日付/時間を含むセルを区別することはできません。また、Doubleの文字列表現をDateTimeとして解析することはできません。 OLE DATE(これは単なるdouble)から.NET DateTimeに変換する方法がありますが、その必要はありません。

Value2プロパティの文書でこのメモをご覧になりましたか?

このプロパティとプロパティの唯一の違いは、値2プロパティが通貨データ型を使用していないということです。 Doubleデータ型を使用すると、これらのデータ型でフォーマットされた値を浮動小数点数として返すことができます。

代わりにValueプロパティを使用してください。期待どおりの場所に.NET DateTimesが表示されます。

+0

それは、私がコピーして貼り付けて、私が使っていたものを完全に理解していないからです。ご協力ありがとうございました!それは今働く。 – cdd

+0

ここでは、特定の値以上の日付を見つけて、そのセルの背景を変更するという全体的な目標を示します。これについてもっと良い方法がありますか? – cdd

+0

おそらく。 Excelの条件付き書式を使用したいだけかもしれません。手動で適用することもできます(設定しようとしているものが1回だけの場合)か、プログラムで実行できます。私はあなたの元の質問に答えました。あなたの問題を解決する正しい方法を調べるために、私はあなたにそれを残します。 –

関連する問題