HOME
물생활
일상생활
개발

개발

PHPExcel을 PhpSpreadsheet로 마이그레이션하기 (서버 설치 x)

듀비양 2022. 5. 20. 01:19

2022년 5월 기준 php 최신 버전은 8.x이다.

php 7버전 이후인지 8버전 이후부터인지는 모르겠으나, 엑셀 다운로드 기능에 편하게 사용되던 PHPExcel 라이브러리가 정상 작동하지 않는다. 구버전에서는 정상작동한다.

개발측에서 더이상 업데이트 하지 않는것 같다.

따라서 PHP최신버전을 사용하거나 php 구버전 (예를들어.. 5.x버전)을 사용하다가 최신 8버전으로 마이그레이션 작업을 해야한다면, PHPExcel 라이브러리를 PhpSpreadsheet로 변경해줘야한다.

PhpSpreadsheet는 PHPExcel과 다른 라이브러리라 새로 설치가 필요하지만, 소스는 비슷해서 마이그레이션 작업이 그닥 어렵지 않다.

 

사실 서버단에서 composer를 이용하여 설치 해야하는데, root 접속 권한이 없다면 깃에서 PhpSpreadsheet를 직접 다운로드 받아야 한다. 

https://github.com/PHPOffice/PhpSpreadsheet

 

GitHub - PHPOffice/PhpSpreadsheet: A pure PHP library for reading and writing spreadsheet files

A pure PHP library for reading and writing spreadsheet files - GitHub - PHPOffice/PhpSpreadsheet: A pure PHP library for reading and writing spreadsheet files

github.com

 

위 링크에서 라이브러리를 다운로드 받고 composer 설치시 생성되는 파일과 디렉토리를 직접 추가해줘야 하는데,

모두 작업된 내용들을 압축해서 아래에 첨부했다.

PhpOffice.zip
1.01MB

위 파일 압축풀어서 php 라이브러리 경로에 그대로 넣어준다.

나는 /www/lib 디렉토리 안에 PhpOffice디렉토리 그대로 넣어줬다.

 

라이브러리 경로에 PhpOffice 디렉토리 그대로 넣고나서 PHPExcel이 적용돼있는 파일을 수정해주자.

대표적인 수정 규칙은 아래와 같다!

####### define('LIB_PATH', '/www/lib'); 된 상태.

# excel 다운로드 파일 상단에 선언
# namespace 사용 (특정 클래스(기능)가 필요하게 되면 상단에 선언 후 사용하는 방식)
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xls; # Xls 파일로 다운받을경우
# use PhpOffice\PhpSpreadsheet\Writer\Xlsx; # Xlsx 파일로 다운받을경우 include_once(LIB_PATH.'/PhpOffice/Psr/autoloader.php'); include_once(LIB_PATH.'/PhpOffice/PhpSpreadsheet/autoloader.php');

# 위 내용을 아래로 변경
# excel 생성
$phpexcel = new PHPExcel();
 - $phpexcel = new Spreadsheet();

#스타일 수정 
# PHPExcel_Style 수정

PHPExcel_Style_Border
 - \PhpOffice\PhpSpreadsheet\Style\Border

PHPExcel_Style_Alignment
 - \PhpOffice\PhpSpreadsheet\Style\Alignment

PHPExcel_Style_Fill
 -\PhpOffice\PhpSpreadsheet\Style\Fill


# duplicateStyleArray를 applyFromArray로 변경
$sheet->duplicateStyleArray(array('fill' => array('type' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,'color' => array('rgb'=>'eeeeee'))),'B2');
 - $sheet->getStyle('B2')->applyFromArray(['fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,'color' => ['rgb'=>'eeeeee']]]);

# 이미지

# 상단에 use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; 추가
new PHPExcel_Worksheet_Drawing();
 - new Drawing();

# 파일저장

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment; filename="'.$filename. '.xls"');
header('Cache-Control: max-age=0');
$writer = new Xls($phpexcel); # Xls 파일로 다운받을경우
#$writer = new Xlsx($phpexcel); # Xlsx 파일로 다운받을경우
$writer->save('php://output');
exit;

위 내용이 기본적인 PHPExcel을 PhpSpreadsheet로 마이그레이션 할때 변경되는 부분이다.

전체적으로 구조가 비슷해서 금방 마이그레이션 할 수 있다.

 

기타 마이그레이션에 필요한 내용은 아래 링크를 참고했다.

https://htlaccess.com/PhpSpreadsheet/docs/topics/migration-from-PHPExcel.md

http://www.freelancerkim.co.kr/v1/bbs/board.php?bo_table=study&wr_id=305 

 

PhpSpreadsheet와 PHPExcel 비교 > 학습자료 | 프리랜서김

(DB UTF8 처리 활성화) mysqli_query($connect,"set session character_set_connection=utf8;"); mysqli_query($connect,"set session character_set_results=utf8;"); mysqli_query($connect,"set session character_set_client=utf8;"); iconv( "EUC-KR","UTF-8","한

www.freelancerkim.co.kr

 

php 버전업 마이그레이션 작업을 할 일이 있었는데

PHPExcel 라이브러리에서 엄청나게 많은 오류를 뿜어내는거 보고 직접 라이브러리를 수정하기엔 무리가 있겠다 싶어서 찾아봤더니 php최신버전은 지원 안한다는 사실을 알고 멘붕했었다.

직접 라이브러리 소스 다 고쳐야되나 하고 슬퍼하고있었는데 다행이도 PhpSpreadsheet로 마이그레이션 하는 작업이 복잡하지 않아서 정말 다행이였다.