[PHP] PHPExcel 날짜 표시 형식 처리하기[PHP] PHPExcel 날짜 표시 형식 처리하기

Posted at 2020. 4. 26. 18:32 | Posted in PHP/PHP Library
반응형






API : http://www.osakac.ac.jp/labs/koeda/tmp/phpexcel/Documentation/API/PHPExcel_Style/PHPExcel_Style_NumberFormat.html





■ 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 페이지에 들어가 보면 확인 할 수 있다.


http://www.osakac.ac.jp/labs/koeda/tmp/phpexcel/Documentation/API/PHPExcel_Style/PHPExcel_Style_NumberFormat.html



날짜 형식이외에 다른 표시 형식, 셀 서식의 지정이 문제가 되는경우 참고하여 진행하면 될 것이다.












반응형
//