【问题标题】:Get Data Type of an Excel Cell in C#在 C# 中获取 Excel 单元格的数据类型
【发布时间】:2018-06-21 23:56:01
【问题描述】:

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

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

【问题讨论】:

  • DataTable 中列的数据类型一旦填充就无法更改。
  • @AVD:我知道这一点,当我最初设置 DataColumn 时,我试图从 excel 中获取单元格类型

标签: c# excel


【解决方案1】:

Excel 输入数据的方法比 C# 宽松得多。例如,数值总是双精度数。如果您使用范围对象的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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 2021-05-10
      • 2012-12-29
      • 1970-01-01
      相关资源
      最近更新 更多