PhpSpreadsheet 를 이용한 엑셀파일 다운로드 개발
PHPExcel을 사용해서 엑셀 파일을 생성해왔는데 PHPExcel의 개발이 중단되어 PhpSpreadsheet를 사용하게 됐다.
Githut Repo : https://github.com/PHPOffice/PhpSpreadsheet
개발문서 : https://phpspreadsheet.readthedocs.io/en/develop/
PhpSpreadsheet 패키지 설치는 Composer
를 이용하며 사용에 필요한 PHP 버전 등은 아래와 같다.
- PHP version 5.6 or newer
- PHP extension php_zip enabled
- PHP extension php_xml enabled
- PHP extension php_gd2 enabled (if not compiled in)
Composer
를 이용한 PhpSpreadsheet 설치는 아래의 명령을 실행한다.
composer require phpoffice/phpspreadsheet
Compser
를 이용해 PhpSpreadsheet 를 설치했다면 아래의 코드로 엑셀파일 다운로드 기능을 테스트 해볼 수 있다.
<?php
require_once __DIR__.'/vendor/autoload.php';
$datas = array(
array('name' => '김정호', 'tel' => '010-1234-1234', 'bank' => '국민은행'),
array('name' => '홍길동', 'tel' => '010-5678-5678', 'bank' => '한국은행')
);
$cells = array(
'A' => array(15, 'name', '신청자명'),
'B' => array(20, 'tel', '전화번호'),
'C' => array(20, 'bank', '은행명')
);
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
foreach ($cells as $key => $val) {
$cellName = $key.'1';
$sheet->getColumnDimension($key)->setWidth($val[0]);
$sheet->getRowDimension('1')->setRowHeight(25);
$sheet->setCellValue($cellName, $val[2]);
$sheet->getStyle($cellName)->getFont()->setBold(true);
$sheet->getStyle($cellName)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle($cellName)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
}
for ($i = 2; $row = array_shift($datas); $i++) {
foreach ($cells as $key => $val) {
$sheet->setCellValue($key.$i, $row[$val[1]]);
}
}
$filename = 'excel';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="'.$filename.'.xlsx"');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
$cells
배열에 저장된 값은 각각 셀넓이, $datas
의 키, 그리고 엑셀파일의 A1, B1 등의 셀에 표시될 내용이다. A1, B1 셀 등의 넓이와 높이를 각각 지정해줬고 신청자명
등은 셀 가운데에 굵게 표시된다.