我正在从一个 XLSX 工作表中读取值并将它们放入数据表中。
我的问题是,我无法推断单元格的数据类型,以便我可以设置数据表的列类型。
我的问题是,我无法推断单元格的数据类型,以便我可以设置数据表的列类型。
相对于C#而言,Excel在数据输入方面非常灵活。例如,数值类型始终为双精度浮点型。如果使用区域对象的Value
属性(get_Value()
在互操作中),如果单元格的内容和格式与这些数据类型一致,则Excel可能会返回一个装箱的decimal
或DateTime
。
如果使用Value2
属性,则货币和日期值将作为装箱双精度浮点数返回。(所有数字都在内部存储为双精度浮点数,因此由于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();
Cell.Value.GetType()
来获取单元格的类型。 public Type GetCellValueType(Range cell)
{
return cell.Value.GetType();
}