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
'programing' 카테고리의 다른 글
문자열을 제목 대소문자로 변환 (0) | 2023.04.22 |
---|---|
토글 버튼 그룹을 WPF의 라디오 버튼처럼 동작시키는 방법 (0) | 2023.04.22 |
IIS 인스턴스에 디버거 연결 (0) | 2023.04.22 |
기본 재배치 작업을 이미 시작했는데 어떻게 두 개의 커밋을 하나로 병합할 수 있습니까? (0) | 2023.04.22 |
백그라운드에서 실행하도록 Windows 스케줄링된 작업을 설정하려면 어떻게 해야 합니까? (0) | 2023.04.22 |