NPOI 날짜 문자열 변환 문제

4770 단어 poi
NPOI로 Excel을 가져올 때 대부분의 경우 각 셀의 데이터 형식을 알 수 없습니다.날짜 형식의 칸에 대해 문자열로 직접 변환하면 예측할 수 없는 날짜 형식의 문자열을 얻을 수 있습니다(예를 들어 2013/5/31 날짜는 "31/5/13"또는 기타로 변환됩니다).따라서 날짜 형식의 단원격 데이터를 가져오려면 먼저 날짜 형식인지 아닌지를 판단해야 한다.
/// <summary>

///  EXCEL DataTable

/// </summary>

protected DataTable ImportDataTableFromExcel(System.IO.Stream excelFileStream, string sheetName, int headerRowIndex) {

    // 

    NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(excelFileStream);

    // sheet

    NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet(sheetName);

    if (sheet == null)

        return null;

    DataTable table = new DataTable();

    NPOI.SS.UserModel.IRow headerRow = sheet.GetRow(headerRowIndex);

    int cellCount = headerRow.LastCellNum;

    // 

    for (int i = headerRow.FirstCellNum; i < cellCount; i++) {

        DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);

        table.Columns.Add(column);

    }

    for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) {

        NPOI.SS.UserModel.IRow row = sheet.GetRow(i);

        DataRow dataRow = table.NewRow();

        if (row != null) {

            for (int j = row.FirstCellNum; j < cellCount; j++) {

                if (row.GetCell(j) == null)

                    dataRow[j] = "";

                else {

                    ICell cell = row.GetCell(j);

                    //Cell NUMERIC , IsCellDateFormatted , 

                    if (cell.CellType == CellType.NUMERIC && DateUtil.IsCellDateFormatted(cell)) dataRow[j] = cell.DateCellValue.ToString("yyyy/MM/dd"); else { dataRow[j] = row.GetCell(j).ToString(); }

                }

            }

            table.Rows.Add(dataRow);

        }

    }

    excelFileStream.Close();

    return table;

}

이것은 Excel 파일을 DataTable로 가져오는 일반적인 방법입니다.DateUtil을 통해IsCellDateFormatted 방법은 셀이 날짜 형식인지, 날짜 형식인지는 셀을 통해 판단할 수 있습니다.DateCellValue 셀의 날짜 값을 가져옵니다.그런 다음 원하는 문자열 형식으로 쉽게 변환할 수 있습니다.그리고 DateUtil.IsCellDateFormatted 방법의 매개 변수가 비NUMERIC이면 오류가 발생하므로 호출하기 전에 CellType이 NUMERIC인지 확인하십시오.

좋은 웹페이지 즐겨찾기