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

6
我正在从一个 XLSX 工作表中读取值并将它们放入数据表中。
我的问题是,我无法推断单元格的数据类型,以便我可以设置数据表的列类型。

1
一旦DataTable被填充,就无法更改列的数据类型。 - KV Prajapati
1
@AVD:我知道这一点,我正在尝试在最初设置DataColumn时从Excel获取单元格类型。 - Jordan
3个回答

7

相对于C#而言,Excel在数据输入方面非常灵活。例如,数值类型始终为双精度浮点型。如果使用区域对象的Value属性(get_Value()在互操作中),如果单元格的内容和格式与这些数据类型一致,则Excel可能会返回一个装箱的decimalDateTime

如果使用Value2属性,则货币和日期值将作为装箱双精度浮点数返回。(所有数字都在内部存储为双精度浮点数,因此由于Excel不需要测试是否转换它们,所以Value2稍微快一些。)

因此,您可以检查列中每个值的类型,并相应地选择数据列的类型。如果要测试一列是否具有更具体的数值类型(float、int、short、byte等),则还需要检查该列的值范围并测试它们是否为整数。


2

你也可以使用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();

1
可以使用Cell.Value.GetType()来获取单元格的类型。
    public Type GetCellValueType(Range cell)
    {
        return cell.Value.GetType();
    }

这是一些检查单元格类型的示例结果: 示例结果

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接