获取C#中Excel单元格的数据types

我正在读取XLSX工作表中的值并将其放入数据表中。

我的问题是,我似乎无法推断单元格的数据types,以便我可以设置数据表的列types。

与C#相比,Excel有更宽松的input数据的方法。 例如,数字值总是双打。 如果使用范围对象的Value属性get_Value()在互操作中的get_Value() ,如果我正确记得),如果单元格的内容和格式与这些数据types一致,则Excel可能会返回(盒装) decimalDateTime

如果您使用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();