簡體   English   中英

在 C# 中獲取 Excel 單元格的數據類型

[英]Get Data Type of an Excel Cell in C#

我正在從 XLSX 工作表中讀取值並將它們放入數據表中。

我的問題是我似乎無法推斷單元格的數據類型,以便我可以設置數據表的列類型。

Excel 具有比 C# 更寬松的數據輸入方法。 例如,數值總是雙精度數。 如果您使用范圍對象的Value屬性(互操作中的get_Value() ,如果我沒記錯的話),如果單元格的內容和格式與這些數據類型一致,Excel 可能會返回(裝箱的) decimalDateTime

如果您使用Value2屬性,貨幣和日期值將作為裝箱的雙精度值返回。 (這些數字都在內部存儲為雙精度數,因此,由於 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();

可以使用Cell.Value.GetType()來獲取單元格的類型。

    public Type GetCellValueType(Range cell)
    {
        return cell.Value.GetType();
    }

以下是檢查單元格類型的一些示例結果:示例結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM