엑셀 파일을 출력하는 방법을 알아보겠습니다.
PHP에서 엑셀 파일을 출력하기 위해 사용할 것은 외부 라이브러리입니다.
여러 가지 라이브러리가 있지만 이번에 사용할 라이브러리는 XLSXWriter입니다.
XLSXWriter라이브러리는 쓰기 기능만 가능한 걸로 알고 있습니다.
하지만 장점으로는 엑셀 파일 만드는 처리속도가 상당히 빠르다는 것입니다.
그리고 PHP 5.2.1부터 사용이 가능합니다.
XLSXWriter 사용방법을 알아보기 전에 라이브러리를 설치해야 합니다.
XLSXWriter 설치
설치 방법은 간단합니다.
아래 사이트에서 파일을 다운 받아 자신의 PHP 라이브러리 보관 폴더 또는 알기 쉬운 장소에 넣어두면 됩니다.
Download ZIP을 클릭해 XLSXWriter php 파일을 다운로드합니다.
XLSXWriter 사용법
저는 C드라이브 php가 설치된 libs 폴더에 라이브러리를 넣어놨습니다.
샘플을 보도록 하겠습니다.
<?php
include_once '/libs/xlsxwriter.class.php';
// 파일 이름
$file = 'example.xlsx'
// 시트 이름
$sheet_name = 'NewSheet1';
$header = array(
'created'=>'date',
'product_id'=>'integer',
'quantity'=>'#,##0',
'amount'=>'price',
'description'=>'string',
'tax'=>'[$$-1009]#,##0.00;[RED]-[$$-1009]#,##0.00',
);
$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'),
);
$writer = new XLSXWriter();
// 헤더 출력(엑셀 첫번째 줄에 작성)
$writer->writeSheetHeader($sheet_name, $header );
// 데이터 출력
foreach ($data as $row){
$writer->writeSheetRow($sheet_name, $row);
}
// 엑셀 파일 저장
$writer->writeToFile($file);
XLSXWriter 사용 방법은 간단합니다.
먼저 헤더 부분 출력에 대해 알아보겠습니다.
writeSheetHeader(시트 이름, 헤더)
시트 이름과 헤더를 지정합니다.
헤더는 배열 형태로 작성을 합니다.
샘플에서는 헤더를 변수 $header에 작성했습니다.
작성 방법을 헤더 이름과 엑셀 속성을 지정합니다.
속성은 표준, 문자열, 날짜 형식 등을 설정합니다.
array(
헤더 이름1=> 속성,
헤더 이름2=> 속성,
...
)
지정한 속성은 해당 열에 전부 적용이 됩니다.
헤더를 설정하고 싶지 않은 경우에는 생략할 수 있습니다.
생략하고 싶은 경우에는 writeSheetHeader 함수를 호출하지 않으면 됩니다.
데이터 작성하는 부분을 보겠습니다.
데이터를 작성하기 위해서는 writeSheetRow 함수를 호출합니다.
writeSheetRow(데이터 출력 값)
writeSheetRow는 행 단위로 데이터를 출력합니다.
writeSheetRow 함수에도 값을 1차원 배열 형태로 지정합니다.
샘플에서는 여러 행의 데이터가 있는 것을 가정하고 2차원 배열로 데이터를 만들었습니다.
2차원 데이터를 모두 출력하기 위해 2차원 배열을 foreach로 반복해 1차원 배열을 하나씩 취득하고 있습니다.
취득한 1차원 배열을 writeSheetRow 함수를 사용해 엑셀에 값을 출력합니다.
엑셀에 모든 값을 출력하면 마지막으로 파일을 저장합니다.
파일을 저장하기 위해서는 writeToFile 함수를 호출합니다.
writeToFile(파일 이름)
지정한 파일이 이미 있는 경우에는 덮어쓰기를 하기 때문에 주의해야 합니다.
저장할 파일을 원하는 폴더에 저장하고 싶은 경우에는 파일 이름에 경로까지 작성하면 됩니다.
$file = 'C:\temp\example.xlsx'
XLSXWriter 사용해 PHP에서 엑셀 파일을 작성하는 방법을 알아봤습니다.
엑셀 파일을 출력하는 라이브러리는 많이 있지만 많은 양의 데이터를 출력만 하는 경우라면 XLSXWriter도 괜찮은거 같습니다.
댓글