[PHP] PHPExcel 날짜 표시 형식 처리하기[PHP] PHPExcel 날짜 표시 형식 처리하기
Posted at 2020. 4. 26. 18:32 | Posted in PHP/PHP Library■ PHPExcel에서 날짜 표시 형식의 데이터 읽어오기
PHPExcle의 사용중 특정 열의 값이 날짜 형태로 지정된 경우
해당 데이터를 읽어 들이고 그 값을 출력해 보면
# 출력결과
위와 같이이 날짜 형식을 지정한 열의 값이
이상한 숫자형태의 값으로 출력되는 것을 확인 할 수 있다.
날짜 형식으로 지정된 값을 불러오기 위해서는,
가져온 데이터를 형식에 알맞게 포맷을 해주어야 하기 때문인데.
해당 방법은 아래와 같다.
# 소스코드
<?php include "./PHPExcel.php"; $objPHPExcel = new PHPExcel(); // 엑셀 데이터를 담을 배열을 선언한다. $xlsData = array(); // 파일의 저장형식이 utf-8일 경우 한글파일 이름은 깨지므로 euc-kr로 변환해준다. $filename = iconv("UTF-8", "EUC-KR", "date_format.xls"); try { // 업로드한 PHP 파일을 읽어온다. $objPHPExcel = PHPExcel_IOFactory::load($filename); $sheetsCount = $objPHPExcel -> getSheetCount(); // 시트Sheet별로 읽기 for($sheet = 0; $sheet < $sheetsCount; $sheet++) { $objPHPExcel -> setActiveSheetIndex($sheet); $activesheet = $objPHPExcel -> getActiveSheet(); $highestRow = $activesheet -> getHighestRow(); // 마지막 행 $highestColumn = $activesheet -> getHighestColumn(); // 마지막 컬럼 // 한줄읽기 for($row = 2; $row <= $highestRow; $row++) { // $rowData가 한줄의 데이터를 셀별로 배열처리 된다. $rowData = $activesheet -> rangeToArray("A" . $row . ":" . $highestColumn . $row, NULL, TRUE, FALSE); // $rowData에 들어가는 값은 계속 초기화 되기때문에 값을 담을 새로운 배열을 선안하고 담는다. $xlsData[$row] = $rowData[0][1]; } } } catch(exception $exception) { echo $exception; } $dateArray = array(); // 형식 : d/m/y h:mm $dateArray[0] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[2], PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME); // 형식 : dd/mm/yy $dateArray[1] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[3], PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY); // 형식 : d-m $dateArray[2] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[4], PHPExcel_Style_NumberFormat::FORMAT_DATE_DMMINUS); // 형식 : d-m-y $dateArray[3] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[5], PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYMINUS); // 형식 : d/m/y $dateArray[4] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[6], PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH); // 형식 : m-y $dateArray[5] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[7], PHPExcel_Style_NumberFormat::FORMAT_DATE_MYMINUS); // 형식 : h:mm AM/PM $dateArray[6] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[8], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME1); // 형식 : h:mm:ss AM/PM $dateArray[7] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[9], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME2); // 형식 : h:mm $dateArray[8] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[10], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3); // 형식 : h:mm:ss $dateArray[9] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[11], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4); // 형식 : mm:ss $dateArray[10] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[12], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME5); // 형식 : h:mm:ss $dateArray[11] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[13], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME6); // 형식 : i:s.S $dateArray[12] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[14], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME7); // 형식 : h:mm:ss;@ $dateArray[13] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[15], PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME8); // 형식 : mm-dd-yy $dateArray[14] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[16], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14); // 형식 : d-mmm-yy $dateArray[15] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[17], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15); // 형식 : d-mmm $dateArray[16] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[18], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX16); // 형식 : mmm-yy $dateArray[17] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[19], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX17); // 형식 : m/d/yy h:mm $dateArray[18] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[20], PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX22); // 형식 : yy-mm-dd $dateArray[19] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[21], PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD); // 형식 : yyyy-mm-dd $dateArray[20] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[22], PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2); // 형식 : yy/mm/dd;@ $dateArray[21] = PHPExcel_Style_NumberFormat::toFormattedString($xlsData[23], PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); echo "<pre>"; print_r( $dateArray ); echo "</pre>"; ?> |
# 출력결과
■ PHPExcel에서 날짜형식을 지정하여 엑셀파일 생성
이제 반대로 엑셀파일을 생성할때 날짜 형식을 지정해 보자.
# 소스코드
<?php include "./PHPExcel.php"; $objPHPExcel = new PHPExcel(); $objPHPExcel -> setActiveSheetIndex(0) -> setCellValue("A1", date("Y-m-d", time())); $objPHPExcel -> getActiveSheet() -> getStyle("A1") -> getNumberFormat() -> setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2); $objPHPExcel -> setActiveSheetIndex(0); $filename = iconv("UTF-8", "EUC-KR", "format_time"); header("Content-Type:application/vnd.ms-excel"); header("Content-Disposition: attachment;filename=".$filename.".xls"); header("Cache-Control:max-age=0"); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5"); $objWriter -> save("php://output"); ?> |
위 코드를 실행하여 엑셀파일을 다운로드 받고 확인해 보면
아래와 같은 결과를 얻을 수 있다.
# 출력결과
위와 같이 다운받은 엑셀 파일의 데이터를 확인해 보면
날짜 형식이 지정된 것을 확인 할 수 있다.
이밖에도 다른 표시형식의 사용은 아래 PHPExcel API 페이지에 들어가 보면 확인 할 수 있다.
날짜 형식이외에 다른 표시 형식, 셀 서식의 지정이 문제가 되는경우 참고하여 진행하면 될 것이다.
'PHP > PHP Library' 카테고리의 다른 글
[PHP] PHPExcel 시트 추가하기 (0) | 2020.02.11 |
---|---|
[PHP] SimpleSql 라이브러리를 사용한 손쉬운 쿼리사용 (1) | 2018.04.16 |
[PHP] PHP 메일 발송 (5) | 2018.04.10 |
[PHP] PHPExcel 엑셀 파일 업로드 하고 내용 읽기 (0) | 2018.03.22 |
[PHP] PHPExcel 설치하고 엑셀파일 다운받기 (0) | 2018.03.21 |