>

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;
     }

하지만 스프레드 시트 조명에는 비슷한 방법이 없습니다.

  • 답변 # 1

    DataType 사용법을 잘 모르겠 기 때문에 개발자에게 요청한 Vincent Tang의 답변은 다음과 같습니다.

    <시간>

    예 SLCell.DataType을 사용합니다. 열거 형이지만 대부분의 데이터의 경우 Number, SharedString 및 String을 사용하게됩니다.

    텍스트 데이터는 SharedString이며, 텍스트가 워크 시트에 직접 포함 된 경우 String이 될 수 있습니다. GetSharedStrings () 또는 이와 유사한 것이 있습니다.

    숫자 데이터의 경우 숫자입니다.

    날짜는 조금 까다 롭습니다. 데이터 형식도 숫자입니다 (Microsoft Excel에서 사용하지 않기 때문에 Date 열거는 무시). 날짜의 경우 SLCell의 SLStyle에있는 FormatCode도 확인해야합니다. GetStyles ()를 사용하여 목록을 가져옵니다. SLCell.StyleIndex는 해당 목록에 대한 색인을 제공합니다.

    예를 들어, SLCell의 셀 값이 "15"이고 데이터 유형이 SharedString 인 경우 공유 문자열 목록에서 색인 15를 찾으십시오. String 데이터 형식의 "blah"이면 바로 그 것입니다.

    숫자 유형 인 56789라면 바로 그 것입니다.

    FormatCode가 "mm-yyyy"(또는 다른 날짜 형식 코드)가 아닌 한 56789는 실제로 1900 년 1 월 1 일 이후의 일 수입니다.

    <시간> 그는 시트에서 SLCell 객체의 목록을 얻기 위해 GetCellList ()를 사용할 것을 권장했습니다. 그러나 어떤 이유로 인해 SL 버전에서 해당 기능을 사용할 수 없으므로 대신 GetCells ()를 사용했습니다. 그러면 SLCellPoint 유형의 키가있는 SLCell 객체의 사전이 반환됩니다.

    예를 들어 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 파일을 마우스 오른쪽 버튼으로 클릭하고 속성 선택

    일반 탭 하단의 차단 해제 버튼을 클릭

  • 답변 # 2

    셀의 값을 얻으려면 다음 코드를 시도하십시오

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

    자세한 내용을 보려면이 링크를 사용하십시오

  • 답변 # 3

    SLCell.DataType 속성을 확인하십시오. Spreadsheetlight 설명서에 따르면 Spreadsheetlight.SLCell

    클래스의 Cell 데이터 유형이 반환됩니다

    public CellValues DataType { get; set; }
    
    

    PS : 참고로, chm 문서를 여는 방법을 알아 냈습니다. Winzip에서 chm 파일을 열어보십시오. 문제없이 열립니다.

    도움이 되길 바랍니다. 고마워

  • 답변 # 4

    글쎄, 많은 흔적과 오류 방법 후에 나는 이것에 대한 해결책을 찾았다.

    셀의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 %의 경우에 효과적이었습니다.

    도움이 되길 바랍니다.

  • 이전 파이썬을 사용하여 파일에서 사전 값을 인쇄하는 방법
  • 다음 layout - flutter - 행에있을 때 텍스트 클리핑이 작동하지 않음