programing

NPOI를 사용하여 Excel 파일에 날짜를 쓰는 데 문제가 발생

bestprogram 2023. 8. 30. 21:54

NPOI를 사용하여 Excel 파일에 날짜를 쓰는 데 문제가 발생

저는 현재 NPOI를 사용하여 asp.net mvc 앱의 데이터베이스를 기반으로 Excel 파일을 생성하고 있습니다.Excel에 날짜를 기록하려고 할 때 계속 발생하는 작은 문제 하나를 제외하고는 코드 작업이 거의 완료되었습니다.

데이터베이스(MS SQL Server)에 41883, 41913 등으로 저장된 날짜가 있습니다.C#에서 다음을 사용하여 DataTime 개체로 변환할 수 있습니다.

DateTime dt = DateTime.FromOADate(Convert.ToDouble(41883));

Excel 날짜를 작성하는 데 사용하는 코드는 다음과 같습니다.

var cell = excelRow.CreateCell(columnIndex);
IDataFormat format = workbook.CreateDataFormat();
short dateFormat = format.GetFormat("dd/MM/yyyy");
cell.SetCellValue(DateTime.FromOADate(Convert.ToDouble(dbDateValue)));
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = dateFormat;
cell.CellStyle = cellStyle;

이것은 제 코드(날짜 쓰기 부분을 하는 조각)의 샘플일 뿐입니다.이 코드의 문제는 날짜 셀의 일부만 실제로 날짜로 포맷된다는 것입니다. 다른 모든 것에 대해서는 여전히 데이터베이스 41883, 41913 등의 값이 표시됩니다. 물론 Excel에서 짧은 날짜/날짜 형식을 선택하여 적용할 수 있습니다(그러나 저는 원하지 않습니다).

왜 그런 행동이 나타날 수 있는지 누가 알려줄 수 있나요? (포맷은 셀의 일부에만 적용됨)...저는 심지어 HSSF 데이터 형식을 사용하려고 했습니다.빌드 형식("날짜")으로 가져오지만 이 경우 셀이 포맷되지 않았습니다.

enter image description here

위의 이미지가 제 문제를 더 잘 설명해 줍니다.첫 번째 열의 첫 번째 셀을 선택하면 셀이 "사용자 정의" 형식으로 표시됩니다.형식이 지정되지 않은 다른 모든 값의 경우 일반입니다.셀을 선택하면 문제없이 Excel에서 날짜 형식으로 포맷할 수 있습니다.모든 날짜 셀에 대해 동일한 코드가 실행되지만 일부만 올바른 형식을 얻기 때문에 이상합니다.

아무것도 변환할 필요가 없습니다.스타일을 만들어 셀에 적용해야 합니다.

        var newDataFormat = workbook.CreateDataFormat();
        var style = workbook.CreateCellStyle();
        style.BorderBottom = BorderStyle.Thin;
        style.BorderLeft = BorderStyle.Thin;
        style.BorderTop = BorderStyle.Thin;
        style.BorderRight = BorderStyle.Thin;
        style.DataFormat = newDataFormat.GetFormat("MM/dd/yyyy HH:mm:ss");

        foreach (var objArticles in tempArticles)
        {
            //Create a new Row
            var row = sheet.CreateRow(rowNumber++);

            //Set the Values for Cells
            row.CreateCell(0).SetCellValue(objArticles.ProjectId);
            row.CreateCell(1).SetCellValue(objArticles.ProjectName);
            row.CreateCell(2).SetCellValue(objArticles.MetricDescription);
            row.CreateCell(3).SetCellValue(objArticles.MetricValue);             
            var cell = row.CreateCell(4);
            cell.SetCellValue(objArticles.BuildDate);
            cell.CellStyle = style; 
            var cell5 = row.CreateCell(5);
            cell5.SetCellValue(objArticles.CreateDate);
            cell5.CellStyle = style;
        }

언급URL : https://stackoverflow.com/questions/26529254/issue-with-writing-a-date-to-excel-file-using-npoi