programing

EPPlus를 사용하여 INT를 반환하는 Excel 날짜 열

nicescript 2023. 4. 22. 22:51
반응형

EPPlus를 사용하여 INT를 반환하는 Excel 날짜 열

그래서 엑셀 문서를 읽고 쓸 때 EPplus를 사용하고 있습니다.

워크플로우

  • 사용자가 입력된 Excel 문서를 생성합니다.
  • 문서를 열고 행을 추가합니다.
  • 업로드 및 읽기

EPPlus를 사용하여 문서를 만들 때 생성된 날짜는 값을 다시 읽을 때 올바르게 표시되지만 사용자가 날짜를 변경하거나 추가한 행은 실제 날짜로 사용할 수 없는 INT 값으로 표시됩니다.

2014년 1월 1일을 입력해서 쓰면 파일을 열었을 때 출력은 41640으로 표시됩니다.

나는 그것을 다음과 같이 읽고 있다.

sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value != null
     ? sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value.ToString().Trim()
         : string.Empty

갱신하다

파일을 내보낼 때 다음을 추가했습니다.

DateTime testDate;

if (DateTime.TryParse(split[i], out testDate))
{
    sheet.Cells[row, i + 1].Style.Numberformat.Format = "MM/dd/yyyy";
    sheet.Cells[row, i + 1].Value = testDate.ToString("MM/dd/yyyy");
}

또한 나는 그 가치를 다시 읽을 때 시도했다.

sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Style.Numberformat.Format = "MM/dd/yyy";

아직 INT를 돌려받았어요.

그 엑셀 파일을 읽어야 할 때 잘못된 날짜는 사용자가 변경한 날짜뿐입니다.

수정된 엑셀 시트를 읽을 때 변경된 날짜는 숫자이고 변경되지 않은 값은 날짜 형식의 문자열입니다.

당신은 그것을 얻을 수 있다.DateTime경유로DateTime.FromOADate:

long dateNum = long.Parse(worksheet.Cells[row, column].Value.ToString());
DateTime result = DateTime.FromOADate(dateNum);

샘플 번호:

Console.Write(DateTime.FromOADate(41640)); // ->  01/01/2014 

오늘 ASP에서 엑셀 문서를 생성하려고 하다가 우연히 이 문제를 발견했습니다.NET 데이터 테이블:문자열은 문제가 없었지만 숫자 유형(int, double, decimal)과 DataTables(OADate)로 포맷된 데이터 테이블에서 문제가 발생했습니다.

제가 결국 해낸 솔루션은 다음과 같습니다.

if (dc.DataType == typeof(DateTime))
{
    if (!r.IsNull(dc))
    {
        ws.SetValue(row, col, (DateTime)r[dc]);
        // Change the following line if you need a different DateTime format
        var dtFormat = "dd/MM/yyyy";
        ws.Cells[row, col].Style.Numberformat.Format = dtFormat;
    }
    else ws.SetValue(row, col, null);
}

보아하니, 요령은 값을 다음과 같이 설정하는 것이었다.DateTime적절한 설정을 실시합니다.Style.Numberformat.Format따라서.

이 블로그의 투고에 풀코드 샘플(EPPlus를 사용한 DataTable to Excel 파일)을 게재했습니다.

사용해보십시오.

  string dateFromExcel = workSheet.Cells[row, col].Text.ToString();
  DateTime localdt;
  if (DateTime.TryParse(dateFromExcel, out localdt))
  {
    dateFromExcel = localdt.ToString("MM/dd/yyyy");
  };

[Value]는 일반적인 포맷으로 값을 읽는 반면 [Text]는 적용된 포맷으로 Excel에서 값을 그대로 읽습니다.

셀 형식이 날짜 형식인지 확인한 후 지금까지 구문 분석할 수 있습니다.

var cell = worksheet.Cells[row, col];
  value = cell.Value.ToString();
  if (cell.Style.Numberformat.Format == "[$-409]d\\-mmm\\-yy;@")
  {
 string inputString = DateTime.FromOADate(long.Parse(value.ToString())).ToString("dd-MMM-yyyy");
 
 }

'번호'를 변경할 수도 있습니다.Format Local' 속성.이건 나한테 효과가 있었어.EPLUS를 사용하여 Excel 파일을 수정하기 전에 포맷하는 경우.

다음은 일반적인 Excel 파일의 코드 형식 열 A의 기본 예입니다.

Sub ChangeExcelColumnFormat()

Dim ExcelApp As Excel.Application
Dim ExcelWB As Excel.Workbook
Dim ExcelWS As Excel.Worksheet
Dim formatRange As Excel.Range

Dim strFile As String = "C:\Test.xlsx"
Dim strSheetname As String = "Sheet1"


ExcelApp = New Excel.Application
ExcelWB = ExcelApp.Workbooks.Open(strFile)

    strColSelect = "A:A"
    strFormat = "dd/mm/yyyy"

    formatRange = ExcelWS.Range(strColSelect)
    formatRange.NumberFormatLocal = strFormat

ExcelWB.Save()
ExcelWB.Close()
ExcelApp.Quit()

ExcelWS = Nothing
ExcelWB = Nothing
ExcelApp = Nothing

종료 서브

언급URL : https://stackoverflow.com/questions/24933947/excel-date-column-returning-int-using-epplus

반응형