获取C#中Excel单元格的数据types
我正在读取XLSX工作表中的值并将其放入数据表中。
我的问题是,我似乎无法推断单元格的数据types,以便我可以设置数据表的列types。
与C#相比,Excel有更宽松的input数据的方法。 例如,数字值总是双打。 如果使用范围对象的Value
属性get_Value()
在互操作中的get_Value()
,如果我正确记得),如果单元格的内容和格式与这些数据types一致,则Excel可能会返回(盒装) decimal
或DateTime
。
如果您使用Value2
属性,货币和date值将作为盒装双击返回。 (数字全部内部存储为双精度,所以,因为Excel不需要testing是否要转换它们,所以Value2稍微快一点。)
因此,您可以检查列中每个值的types,并相应地select数据列的types。 如果你想testing列是否可以有更具体的数字types(float,int,short,byte等),那么你还需要检查该列的值范围,并testing它们是否是整数。
你也可以使用Excel.Range的NumberFormat属性,并用它来查看格式。 如果你只需要找出什么是string,什么不是 – tryParse的解决scheme更有效(我认为更漂亮!)。
这是一个计划B:
string format = range.NumberFormat.ToString(); if(format == "#,##0.00") { //Type is Number }
我认为这个解决scheme可能会更好,如果你确实知道什么types的值可以从不同。 从这一个你可以检查格式是否包含百分比等。
您还可以查看从Excel中获取的整个列在单元格中的格式是否相同,
//If this is "" the column has different types in it string checkFormat = range.EntireColumn.NumberFormat.ToString();