C# 获取C中Excel单元格的数据类型#
我正在从XLSX工作表中读取值,并将它们放入数据表中C# 获取C中Excel单元格的数据类型#,c#,excel,C#,Excel,我正在从XLSX工作表中读取值,并将它们放入数据表中 我的问题是,我似乎无法推断单元格的数据类型,以便设置数据表的列类型。Excel的数据类型方法比C#宽松得多。例如,数值总是双精度的。如果使用范围对象的Value属性(get\u Value()在interop中,如果我没有记错的话),如果单元格的内容和格式与这些数据类型一致,Excel可能会返回(装箱的)decimal或DateTime 如果使用Value2属性,则money和date值将以盒装双精度形式返回。(这些数字都以双精度形式存储在内
我的问题是,我似乎无法推断单元格的数据类型,以便设置数据表的列类型。Excel的数据类型方法比C#宽松得多。例如,数值总是双精度的。如果使用范围对象的
Value
属性(get\u Value()
在interop中,如果我没有记错的话),如果单元格的内容和格式与这些数据类型一致,Excel可能会返回(装箱的)decimal
或DateTime
如果使用Value2
属性,则money和date值将以盒装双精度形式返回。(这些数字都以双精度形式存储在内部,因此,由于Excel不需要测试是否转换它们,Value2稍微快一些。)
因此,您可以检查列中每个值的类型,并相应地选择数据列的类型。如果您想测试一列是否可以有更具体的数字类型(float、int、short、byte等),那么您还需要检查该列中的值的范围,并测试它们是否为整数。您还可以使用Excel.range的NumberFormat属性,并使用该属性检查格式。尽管如此,如果您只需要找出什么是字符串,什么不是字符串,那么使用tryParse的解决方案更有效(我认为更漂亮!) 这是一个B计划:
string format = range.NumberFormat.ToString();
if(format == "#,##0.00")
{
//Type is Number
}
我认为这个解决方案可能会更好,如果你能确定哪些类型的值会有所不同。
从这一个你可以检查格式是否包含百分比等等
您还可以查看从Excel获取的整个列的单元格中是否具有相同的格式
//If this is "" the column has different types in it
string checkFormat = range.EntireColumn.NumberFormat.ToString();
一旦数据表中的列被填充,您就不能更改它的数据类型。@AVD:我知道,当我最初设置数据列时,我正试图从excel中获取单元格类型