PHP로 Excel 문서 생성, 데이터 읽기를 할 수 있는 PhpSpreadsheet 설정 샘플 코드입니다
개요
PHP에서 Excel 문서를 읽거나 Excel 형태로 문서를 저장해야 할 때 주로 PhpSpreadsheet를 사용하게 됩니다.
이전에는 PHPExcel이라는 이름이었으나 현재는 해당 버전의 개발-유지보수가 중단되고 새로운 프로젝트로 PhpSpreasheet라는 이름으로 업그레이드 되었습니다.
또한 PhpSpreadsheet는 Excel 뿐만 아니라 PDF 형식으로도 파일을 저장할 수 있어서 많이 사용되고 있습니다.
이번에는 이 PhpSpreadsheet로 문서를 저장할 때 사용하는 주요 소스 코드의 샘플을 정리해보겠습니다.
클래스 로드
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
?>
기본 설정
<? php
// 문서 가로,세로 방향 설정
$spreadsheet->getActiveSheet()->getPageSetup()
->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_PORTRAIT);
// 문서 사이즈 설정
$spreadsheet->getActiveSheet()->getPageSetup()
->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_A4);
// 문서 정보 설정
$spreadsheet->getProperties()->setCreator("써드아이시스템")
->setLastModifiedBy("써드아이시스템")
->setTitle("문서 타이틀")
->setSubject("문서 제목")
->setDescription("문서 설명")
->setKeywords("키워드")
->setCategory("카테고리");
// 문서 좌우 여백 설정
$spreadsheet->getActiveSheet()->getPageMargins()->setTop(0.5);
$spreadsheet->getActiveSheet()->getPageMargins()->setBottom(0.25);
$spreadsheet->getActiveSheet()->getPageMargins()->setRight(0.75);
$spreadsheet->getActiveSheet()->getPageMargins()->setLeft(0.75);
?>
셀 값 설정
<? php
$spreadsheet->setActiveSheetIndex(0)->setCellValue("C11", $value);
$spreadsheet->setActiveSheetIndex(0)->setCellValue("B25", "셀 값 설정\r\n다음 줄");
?>
셀에 이미지 설정
<? php
$drawing_logo = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing_logo->setName('Logo');
$drawing_logo->setDescription('3rdEYESYS Logo');
$drawing_logo->setPath('/ncp/data/www/img/3rdeyesys_logo.png');
$drawing_logo->setCoordinates('A1');
$drawing_logo->setWidth(230);
$drawing_logo->getShadow()->setVisible(true);
$drawing_logo->setWorksheet($spreadsheet->getActiveSheet());
?>
셀 병합
<? php
// 동일한 행에서 병합
$spreadsheet->getActiveSheet()->mergeCells("A1:D1");
// 여러 행에서 병합
$spreadsheet->getActiveSheet()->mergeCells("G5:I7");
// 변수 사용
for ($j = 52; $j <= 57; $j++)
{
$spreadsheet->getActiveSheet()->mergeCells("B".$j.":C".$j);
}
?>
행 높이 설정
<?php
for ($j = 1; $j <= 5; $j++)
{
$spreadsheet->getActiveSheet()->getRowDimension($j)->setRowHeight(12);
}
$spreadsheet->getActiveSheet()->getRowDimension(10)->setRowHeight(35);
?>
열 너비 설정
<?php
// 특정 열 너비 설정
$spreadsheet->getActiveSheet()->getColumnDimension("A")->setWidth(3);
// 범위 내 여러 열 너비 설정
foreach(range("B","J") as $columnID)
{
$spreadsheet->getActiveSheet()->getColumnDimension($columnID)->setWidth(15);
}
?>
셀 스타일 지정
<?php
// 셀 스타일을 배열 형식으로 저장
// 순서대로 border, font, 배경색 지정하는 스타일
$styleArray_Cell = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => 'FF20AFA5']
]
],
'font' => [
'bold' => true,
'size' => 9,
'color' => ['argb' => 'FFFFFFFF'],
],
'fill' =>[
'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
'color' => ['argb' => 'FF20AFA5']
]
];
// 특정 셀에 스타일 적용
$spreadsheet->getActiveSheet()
->getStyle("B40")->applyFromArray($styleArray_Cell);
// 특정 범위의 여러 셀에 스타일 동시 적용
$spreadsheet->getActiveSheet()
->getStyle("G45:G46")->applyFromArray($styleArray_Cell);
// 특정 셀에 폰트 스타일 직접 적용
$spreadsheet->getActiveSheet()
->getStyle("B80")->getFont()->setSize(13)->setBold(true);
?>
PDF 로 저장
<?php
$spreadsheet->setActiveSheetIndex(0);
// Mpdf 클래스 별로 설치해야 함
IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class);
$out_put_file_full_name = "sample.pdf";
// Redirect output to a client’s web browser (PDF)
header('Content-Type: application/pdf; charset=utf-8' );
header('Content-Disposition: attachment;filename="'.$out_put_file_full_name.'"');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Pdf');
$writer->save('php://output');
exit;
?>
PhpSpreadsheet를 사용해서 pdf 파일을 저장하려면 Mpdf 를 추가로 설치해야 합니다.
이와 관련된 내용은 다음 문서에서 다시 정리하겠습니다.
Excel로 저장
<?php
$spreadsheet->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel2007)
$out_put_file_full_name = "sample.xlsx";
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$out_put_file_full_name.'"');
header('Cache-Control: max-age=0');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 2022 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
?>
참고 URL
- PhpSpreadsheet Documentation
- PhpSpreadsheet GitHub Source and Download