Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取C中Excel单元格的数据类型#_C#_Excel - Fatal编程技术网

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

C# 获取C中Excel单元格的数据类型#,c#,excel,C#,Excel,我正在从XLSX工作表中读取值,并将它们放入数据表中 我的问题是,我似乎无法推断单元格的数据类型,以便设置数据表的列类型。Excel的数据类型方法比C#宽松得多。例如,数值总是双精度的。如果使用范围对象的Value属性(get\u Value()在interop中,如果我没有记错的话),如果单元格的内容和格式与这些数据类型一致,Excel可能会返回(装箱的)decimal或DateTime 如果使用Value2属性,则money和date值将以盒装双精度形式返回。(这些数字都以双精度形式存储在内

我正在从XLSX工作表中读取值,并将它们放入数据表中


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

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中获取单元格类型