私は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
私がオンライン発見したものの大部分は非常に具体的な日付文字列を見つけることについてあった、とだけでなく、一般的にさかのぼりました。私は、誰かがなぜ私が期待どおりその条件に当てられていないのかを見つけるのを助けることができるかもしれないことを望んでいました。
'DateTime testdt = new DateTime();'デバッガを使用していますか? foreachループ内でDateTimeの新しいインスタンスを作成しているからです。セルに日付フィールドがある場合は、CellvalsのどのフィールドがDateTimeフィールドであるかを知る必要があります。なぜこの行が決してヒットしないのかは明らかです。あなたのコードのデバッグとブレークポイントの設定から始めてください。 – MethodMan