簡體   English   中英

如何在電子表格中使用C#獲取單元格的格式類型

[英]How to get format type of cell using c# in spreadsheetlight

我正在使用試算表庫使用c#讀取Excel工作表(.xslx)值。

我可以使用以下代碼讀取單元格值

 for (int col = stats.StartColumnIndex; col <= stats.EndColumnIndex; col++)
     {              
         var value= sheet.GetCellValueAsString(stats.StartRowIndex, col);  //where sheet is current sheet in excel file    
     }

我正在獲取單元格值。 但是如何獲取單元格的數據類型? 我已經簽入了文檔,但是沒有找到解決方案。

注意:對於.xls類型的excel文件,我正在使用ExcelLibrary.dll庫,在其中可以使用以下代碼輕松獲取單元格的數據類型

for (int i = 0; i <= cells.LastColIndex; i++)
     {
         var type = cells[0, i].Format.FormatType;
     }

但是電子表格中沒有類似的方法。

這是我不確定他如何使用DataType后,問他后開發人員Vincent Tang的回答:


是的,請使用SLCell.DataType。 這是一個枚舉,但是對於大多數數據,您將使用Number,SharedString和String。

文本數據將為SharedString,如果文本直接嵌入工作表中,則可能為String。 有一個GetSharedStrings()或類似的東西。

對於數字數據,它將是數字。

對於日期,這有點棘手。 數據類型也是Number(忽略日期枚舉,因為Microsoft Excel未使用它)。 對於日期,您還必須檢查SLCell的SLStyle中的FormatCode。 使用GetStyles()獲取列表。 SLCell.StyleIndex為您提供該列表的索引。

例如,如果您的SLCell的單元格值為“ 15”且數據類型為SharedString,則在共享字符串列表中查找索引15。 如果它是String類型的數據,就這樣。

如果數字類型是56789,那么就是這樣。

除非FormatCode是“ mm-yyyy”(或其他日期格式代碼),否則56789實際上是自1900年1月1日以來的天數。


他還建議使用GetCellList()以獲得工作表中SLCell對象的列表。 但是,由於某種原因,該功能在我的SL版本中不可用,所以我改用GetCells()。 這將返回SLCell對象的字典,其鍵類型為SLCellPoint。

因此,例如,要獲取單元格A1的DataType(這是一個CellValues對象),請執行以下操作:

using (SLDocument slDoc = new SLDocument("Worksheet1.xlsx", "Sheet1")) {

    slCP = SLCellPoint;
    slCP.ColumnIndex = SLConvert.ToColumnIndex("A"); ///Obviously 1 but useful function to know
    slCP.RowIndex = 1;

    CellValues slCV = slDoc.GetCells(slCP).DataType;

}

順便說一句,我在打開chm幫助文件時也遇到了問題。 嘗試這個:

  • 右鍵單擊chm文件並選擇屬性
  • 單擊常規選項卡底部的取消阻止按鈕

要獲取單元格的值,請嘗試以下代碼

 var cellValue = (string)(excelWorksheet.Cells[10, 2] as Excel.Range).Value;

使用鏈接了解更多詳細信息

簽出SLCell.DataType屬性。 Spreadsheetlight文檔提到在Spreadsheetlight.SLCell類中它返回Cell數據類型。

public CellValues DataType { get; set; }

PS:在旁注中,我想出了如何打開chm文檔。 嘗試在Winzip中打開chm文件,該文件不會出現任何問題。

希望能幫助到你。 謝謝

好吧,經過大量的跟蹤和錯誤方法,我終於找到了解決方案。

根據單元格的formatCode ,我們可以確定單元格的formatType

使用GetCellStyle方法,我們可以獲取單元格的格式代碼 使用這個formatCode,我們可以確定formatType

var FieldType = GetDataType(sheet.GetCellStyle(rowIndex, columnIndex).FormatCode);


private string GetDataType(string formatCode)
    {
        if (formatCode.Contains("h:mm") || formatCode.Contains("mm:ss"))
        {
            return "Time";
        }
        else if (formatCode.Contains("[$-409]") || formatCode.Contains("[$-F800]") || formatCode.Contains("m/d"))
        {
            return "Date";
        }
        else if (formatCode.Contains("#,##0.0"))
        {
            return "Currency";
        }
        else if (formatCode.Last() == '%')
        {
            return "Percentage";
        }
        else if (formatCode.IndexOf("0") == 0)
        {
            return "Numeric";
        }
        else
        {
            return "String";
        }
    } 

這種方法適用於99%的情況。

希望對您有幫助。

暫無
暫無

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

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