私はXLSXワークシートから値を読み込み、それらをデータテーブルに入れています。C#のExcelセルのデータ型を取得
私の問題は、データテーブルの列タイプを設定できるように、セルのデータ型を推測することができないということです。
私はXLSXワークシートから値を読み込み、それらをデータテーブルに入れています。C#のExcelセルのデータ型を取得
私の問題は、データテーブルの列タイプを設定できるように、セルのデータ型を推測することができないということです。
Excelは、C#よりもデータを入力する方法がはるかに緩いです。たとえば、数値は常に倍になります。範囲オブジェクトのValue
プロパティ(get_Value()
interopの場合、正しく呼び出すと)を使用すると、セルの内容と書式設定がこれらのデータ型と一致する場合、Excelはおそらくボックス化されたdecimal
またはDateTime
を返します。
Value2
プロパティを使用すると、マネーと日付の値がボックスドゥーとして返されます。 (数値はすべてdouble型として内部的に格納されるため、Excelで変換するかどうかをテストする必要がないため、Value2は少し速い)。
したがって、列内の各値のタイプ、それに応じてデータ列のタイプを選択します。列がより具体的な数値型(float、int、short、byteなど)を持つかどうかをテストする場合は、その列の値の範囲を調べて、それらが整数かどうかをテストする必要もあります。
Excel.RangeのNumberFormatプロパティを使用して、これを使用してフォーマットを確認することもできます。あなたが文字列であるかどうかを調べる必要があるだけであれば、tryParseのソリューションがより効果的です(と私は思っています!)。ここで
はプランBである:
string format = range.NumberFormat.ToString();
if(format == "#,##0.00")
{
//Type is Number
}
私はあなたが値がが異なることができますどのような種類確実にわかっている場合は、このソリューションは、より良いかもしれないと思います。 フォーマットにパーセントなどが含まれているかどうかを確認できます。
は、Excelから取得している列全体が、その細胞内で同じフォーマットを持っている場合にも、それが移入されたらあなたはDataTableの列のデータ型を変更することはできません
//If this is "" the column has different types in it
string checkFormat = range.EntireColumn.NumberFormat.ToString();
、見ることができます。 – adatapost
@AVD:私はこれを知っています、私はDataColumnを最初に設定するときに、細胞型をExcelから取得しようとしています – Jordan