[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



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












반응형
//

[DeveloperTool] Atom Edit에서 FTP 간편 접속하기[DeveloperTool] Atom Edit에서 FTP 간편 접속하기

Posted at 2020. 4. 26. 14:36 | Posted in Developer Tool
반응형





FTP-Remote-Edit 패키지 사용하기





필자는 PHP개발에 있어 주력으로 사용하는 프로그램은 아톰 에디트( Atom Edit ) 이다.


그런데 한가지 이 아톰 에디트를 사용하는데 있어 가장 답답한 점이 FTP에 접근하여 코드를 수정하는 것인데.


구글에서 검색을 하면 아톰 에디터의 FTP 사용에 대해서는


Remote-FTP 라는 패키지를 사용하여 FTP에 접속하는 것만 주구장창 나온다.







이와 같이 사용해야 하는경우


하나의 FTP가 아닌 여러 FTP에 수시로 접근해야 할떄


매번 값을 바꿔주고 하는 것이 여간 귀찮은 것이 아니다.



그렇게 답답해 하던 차에 괜찮은 FTP접속 패키지를 발견하여 설치방법을 정리하고자 한다.









■ FTP-Remote-Edit 패키지 사용하기





FTP-REMOTE-EDIT라는 오픈 패키지인데,


한번 값을 입력해두면 계속 그 값을 기억하기 때문에 사용이 손쉽다.


아래 이미지를 보면서 설치해 보자







먼저 상단 메뉴의 FileSettings를 선택한다.


Settings 창이 나타나면 리스트에서 Install 을 선택하고


ftp-remote-edit를 검색하고 설치해 주자.







설치가 완료되면 다시 상단의 Packages를 선택해 보면


Ftp-Remote-Edit가 추가된 것을 확인 할 수 있다.


Packages → Ftp-Remote-Edit  → Toogle Ctrl + 공백 을 선택하여


작업을 계속 진행하자.







그럼  Enter password only for this session 이라고 팝업창이 뜨는데


거기에 앞으로 FTP-REMOTE-EDIT를 실행시킬때 입력할 패스워드를 입력하고


Enter 버튼을 클릭해 준다.







그럼 이제 Package탭옆에 Remote라는 탭이 나타나는데


여기서 마우스 우클릭을 해주고 Edit Servers 를 선택해주면


Ftp-Remote-Edite Server Settings 라는 창이 팝업된다.


여기에 접속할 FTP의 정보를 입력하고 저장( Save )해주면


앞으로 FTP에 손쉽게 접속하여 작업을 진행 할 수 있다.









■ AWS 서버 Keyfile을 사용






AWS와같이 KEYFILE( *.pem ) 파일을 등록하여야 하는경우에도


위와같이 손쉽게 사용이 가능하다.









반응형
//

[Flow.Txt] 하루 방문자수 2천명을 돌파하였습니다.(2020.04.24)[Flow.Txt] 하루 방문자수 2천명을 돌파하였습니다.(2020.04.24)

Posted at 2020. 4. 24. 10:16 | Posted in Flow.Txt
반응형





블로그 하루 방문자수가 지난 04월 21일 2천을 돌파했다.


평균적으로 보면 아직도 평일 2천을 조금 못찍는 1800 ~ 1990 언저리겠지만.


계속 포스팅을 정리하고 글을 쓰다보면...


이제 평균적으로 2천은 5월중이면 찍게 되겠지...





올해초 1월 평균 방문자수가 평일 1천명을 겨우겨우 찍었기에...


이대로 잘관리한다면 아마 올해가 가기 전에 3천에서 4천...


정도는 올해 말에 달성 할 거라고 생각했는데...


뭐랄까... 딱 그정도가 될거 같다라는 생각이 든다.


막상 이렇게 되니, 말이야...


목표를 더 높게 잡았어야 하는건 아닌가 하는...


생각이 드는건, 뭔지...




블로그는 내가 생각하는 개발자로서의 결론은 아닐거다.


그렇지만 그중 정말 큰 한축이 되는 기반이 되는 거라 생각한다.




정리...


머리가 좋거나, 딱히 개발적 지식과 지혜가 뛰어나지도 않은 내가 개발자가 된것도.


우둔할 정도로 붙잡고 늘어지고 정리한 거니까...



...



조금은 구체적이지 못한 지금의 머리속 퍼즐에서...


좀 큰 틀이되어줄 것은 파츠를 가지고 있다는건...


다행이라는 생각이 든다.








반응형
//

[Flow.Txt] 흔한 공돌이가 시대가 바뀜을 느끼는 순간(2020.04.06)[Flow.Txt] 흔한 공돌이가 시대가 바뀜을 느끼는 순간(2020.04.06)

Posted at 2020. 4. 6. 09:34 | Posted in Flow.Txt
반응형






아침 출근길에 아무것도 안나오지 않고...


검은색 백그라운드에 Android 라는 문구만 떠져있는것을 보았다.


예전에 이런 전광판을 띄워주는 컴퓨터 환경은


전부 Windows 였는데...


이제는 Android가 그 자리를 가져가는구나...


라는 생각이 들었다.








몇년전까지만 해도...


오작동 하고 있는 전광판에서는 Windows 화면과


이 Windows는 정품이 아닙니다.


라는 문구가 가장 먼저 보였었는데...


이제는 평생 변하지 않을것 같던 윈도우즈의 점유율도.


서서히 안드로이드에게 그 자리를 내어주고 있구나...





라는 걸 생각해 보면서,


지하철을 타고 출근을 하며 든 생각을 몇자 끄적여 보았다.




역시 코틀린을 해야 돈을 벌겠구나 라는 생각도 함께 하면서...











반응형
//