728x90
안녕하세요! 개발을 하다보면 특정 정보들을 엑셀로 작성해야할 때가 있는데요 오늘은 xlsx writer 라이브러리를 사용해서 엑셀 파일을 생성하는 것을 함께 살펴보도록하겠습니다.
1.xlsx writer?
PHP에서 엑셀문서를 만들 수 있는 외부라이브러리는 여러가지가 있습니다. phpSpreadsheet 나 php excel 등등, 그러나 오늘은 xlsx writer을 사용해보겠습니다.
- PHP 5.2.1 이상부터 사용할 수 있으며 쓰기만 지원합니다.
- UTF-8 인코딩된 입력을 사용합니다. 그리고 다중 워크시트 사용이 가능합니다.
- 통화/날짜/셀 형식, 간단한 공식 및 기본 셀 스타일링을 지원합니다.
- 속도가 매우 빠르고 가벼움에도 대용량 10만 개 이상의 행 스프레드시트 작성할 수 있다는 장점이 있습니다.
사용할 수 있는 포맷(서식)은 아래와 같습니다.
포맷 | 포맷 코드 |
string | @ |
integer | 0 |
date | YYYY-MM-DD |
datetime | YYYY-MM-DD HH:MM:SS |
time | HH:MM:SS |
price | #,##0.00 |
dollar | [$$-1009]#,##0.00;[RED]-[$$-1009]#,##0.00 |
euro | #,##0.00 [$€-407];[RED]-#,##0.00 [$€-407] |
사용가능한 스타일 값은 아래와 같습니다.
font (폰트) |
Arial, Times New Roman, Courier New, Comic Sans MS |
font-size (폰트 사이즈) |
8,9,10,11,12 ... |
font-style (폰트 스타일) |
bold, italic, underline, strikethrough or multiple ie: 'bold,italic' |
border (외곽선) |
left, right, top, bottom, or multiple ie: 'top,left' |
border-style (선 스타일) |
thin, medium, thick, dashDot, dashDotDot, dashed, dotted, double, hair, mediumDashDot, mediumDashDotDot, mediumDashed, slantDashDot |
border-color (선 색상) |
#RRGGBB, ie: #ff99cc or #f9c |
color (폰트 색상) |
#RRGGBB, ie: #ff99cc or #f9c |
fill (셀 색상) |
#RRGGBB, ie: #eeffee or #efe |
halign (수평정렬) |
general, left, right, justify, center |
valign (수직정렬) |
bottom, center, distributed |
xlsx writer 라이브러리는 아래 링크를 통해 다운받으실 수 있습니다.
https://github.com/mk-j/PHP_XLSXWriter
2.예제
2-1 기본 사용
<?php
//스타일 및 포맷 미적용 된 기본 사용법.
include_once("xlsxwriter.class.php"); //다운로드한 파일에서 해당 php 파일을 include 시킨다.
$writer = new XLSXWriter(); //xlsxwriter 객체 생성
$file_name = "test.xlsx"; //파일이름
$data = array(
array('year','month','amount'), //첫번째 줄에 들어가는 부분
array('2003','1','220'), //두번째 줄
array('2003','2','153.5'), //세번째 줄
);
$writer->writeSheet($data);//엑셀에 해당 정보 입력
$writer->writeToFile($file_name);//파일로 다운로드
?>
2-2 포맷(서식) 및 스타일 적용
<?php
//스타일 및 포맷 적용 사용법.
include_once("xlsxwriter.class.php"); //다운로드한 파일에서 해당 php 파일을 include 시킨다.
$writer = new XLSXWriter(); //xlsxwriter 객체 생성
$file_name = "test_format_style.xlsx"; //파일이름
$sheet_name = "test"; //시트이름
//헤더에서 포맷 설정 // '첫번째 줄에 들어가는 값' = > 포맷
$header = array(
'created'=>'date',
'product_id'=>'integer',
'quantity'=>'#,##0',
'amount'=>'price',
'description'=>'string',
'tax'=>'[$$-1009]#,##0.00;[RED]-[$$-1009]#,##0.00',
);
//헤더 이후 들어가는 값들을 array에 넣어준다.
$data = array(
array('2015-01-01',873,1,'44.00','misc','=D2*0.05'),
array('2015-01-12',324,2,'88.00','none','=D3*0.05'),
);
//스타일 값 정의
$styles = array(
'font'=>'Arial',
'font-size'=>10,
'font-style'=>'bold',
'fill'=>'#eee',
'halign'=>'center',
'border'=>'left,right,top,bottom'
);
//헤더 작성
$writer->writeSheetHeader($sheet_name,$header);//(파람1: 시트명,파람2: 위에서 정의한 헤더)
foreach($data as $row){
//한줄씩 지정된 시트에 값 작성.
$writer->writeSheetRow($sheet_name,$row,$style);//시트이름,시트에 들어가는 값들,스타일
}
$writer->writeToFile($file_name);//파일명으로 파일 생성
?>
2-3 복수 시트 사용
<?php
include_once("xlsxwriter.class.php");
//헤더 값 및 서식 지정
$header = array(
'year'=>'string',
'month'=>'string',
'amount'=>'price',
'first_event'=>'datetime',
'second_event'=>'date'
);
//작성할 값1
$data1 = array(
array('2003','1','-50.5','2010-01-01 23:00:00','2012-12-31 23:00:00'),
array('2003','=B2', '23.5','2010-01-01 00:00:00','2012-12-31 00:00:00'),
array('2003',"'=B2", '23.5','2010-01-01 00:00:00','2012-12-31 00:00:00'),
);
//작성할 값2
$data2 = array(
array('2003','01','343.12','4000000000'),
array('2003','02','345.12','2000000000'),
);
//xlsx writer 객체 생성
$writer = new XLSXWriter();
//Sheet1에 헤더 작성(첫번째 헤더명: Sheet2)
$writer->writeSheetHeader('Sheet1', $header);
//Sheet1라는 이름으로 생성된 시트에 데이터 쓰기.
foreach($data1 as $row){
$writer->writeSheetRow('Sheet1', $row);
}
//Sheet2라는 이름으로 생성된 시트에 데이터 쓰기.
foreach($data2 as $row){
$writer->writeSheetRow('Sheet2', $row);
}
$writer->writeToFile('xlsx-sheets.xlsx');
//$writer->writeToStdOut();
//echo $writer->writeToString();
exit(0);
?>
2-4 행 너비 및 높이 지정
<?php
set_include_path(get_include_path().PATH_SEPARATOR."..");
include_once("xlsxwriter.class.php");
$file_name = 'xlsx_size_option.xlsx';
$writer = new XLSXWriter();//객체 생상
//첫번째 파라미터:시트명, 두번째 파라미터: 셀에 순서대로 들어가는 값, 세번째 파라미터: 가로 및 세로 옵션 값.
$writer->writeSheetHeader('Sheet1', $rowdata = array(300,234,456,789), $col_options = ['widths'=>[10,20,30,40]] );
$writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $row_options = ['height'=>20] );
$writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $row_options = ['height'=>30] );
$writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $row_options = ['height'=>40] );
$writer->writeToFile($file_name);
?>
이외에도 셀 병합 등, xlsx writer는 엑셀과 관련한 여러 옵션들을 제공하고 있습니다.
자세한 내용은 위의 링크 참고바랍니다.
'PHP' 카테고리의 다른 글
[PHP] 커스텀 토스트 메시지 띄우기 (0) | 2023.07.06 |
---|---|
[PHP] 다양한 확장자의 파일을 업로드 해주는 함수 (0) | 2023.03.13 |
[PHP] number_format 함수로 숫자 포맷팅하기. (0) | 2023.03.08 |
[PHP] png 파일 압축해서 업로드하기 (0) | 2022.12.06 |
[PHP] 파일이나 디렉토리 있는지 확인하고 만들기 (0) | 2022.09.06 |