본문 바로가기

『IT/개발』/PHP

[PHPExcel] PHP 에서 데이터를 엑셀로 쓰고 다운로드 해보자!


[PHPExcel] PHP 에서 데이터를 엑셀로 쓰고 다운로드 해보자!


먼저 PHP 에서 데이터를 엑셀 파일로 쓰기 위해서는 PHPExcel 이라는 라이브러리가 필요합니다.

PHPExcel 파일은 아래 링크를 통해서 다운로드 받자!

https://phpexcel.codeplex.com/

다운로드 한 파일을 압축해제하면 Classes, Documentation, Examples 파일 등이 존재 할 것입니다.

이 중 Classes 폴더만 있으면 됩니다.

해당 폴더를 사용하고자 하는 프로젝트 폴더 내에 복사 시키면 사용 준비 끝!!!


여기서 할 것은 배열 Array 를 엑셀파일로 쓰는 것을 할 것입니다.

소스에 대한 설명은 중간중간에 있는 주석으로 대신하겠습니다.

<?php

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
ini_set('memory_limit','-1');
ini_set("max_execution_time","0");

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');

date_default_timezone_set('Asia/Seoul');

/** 위 소스는 크게 신경 쓰지 않아도 됨 **/

/** PHPExcel 라이브러리 포함 **/
require_once 'Classes/PHPExcel.php';

/** PHPExcel 클래스 선언 **/
$objPHPExcel = new PHPExcel();

// Set document properties
// 이 또한 크게 신경 쓰지 않아도 되겠습니다.
$objPHPExcel->getProperties()->setCreator('Maarten Balliauw')
                             ->setLastModifiedBy('Maarten Balliauw')
                             ->setTitle('Office 2007 XLSX Test Document')
                             ->setSubject('Office 2007 XLSX Test Document')
                             ->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.');

/** 아래 부분이 엑셀에 쓰는 부분입니다. **/
/** A1 에 '이름' B1 에 성별을 각각 썼네요. **/
// Create the worksheet
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', '이름')
                              ->setCellValue('B1', '성별');

/** 아래 배열을 엑셀에 쓸 것입니다. **/
$tmpArray = array(
	array(
		'NAME' => '홍길동1',
		'GENDER' => '남자'
	),
	array(
		'NAME' => '홍길동2',
		'GENDER' => '여자'
	),
	array(
		'NAME' => '홍길동3',
		'GENDER' => '남자'
	)
);

/** 위 배열 $tmpArray 를 A2 부터 차례대로 쓴다는 말입니다. **/
$objPHPExcel->getActiveSheet()->fromArray($tmpArray, NULL, 'A2');

/** A1 에서 부터 B1 까지를 Bold 처리 함 **/
$objPHPExcel->getActiveSheet()->getStyle('A1:B1')->getFont()->setBold(true);

/** A1 에서 B1 까지의 스타일을 정의 함 **/
$objPHPExcel->getActiveSheet()->getStyle('A1:B1')->applyFromArray(
    array('fill'    => array(
                                'type'      => PHPExcel_Style_Fill::FILL_SOLID,
                                'color'     => array('argb' => 'FFCCFFCC')
                            ),
          'borders' => array(
                                'bottom'    => array('style' => PHPExcel_Style_Border::BORDER_THIN),
                                'right'     => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
                            )
         )
    );

/** 각각의 셀 크기를 지정함 **/
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);

/** 영영을 지정하여 가로 세로의 정렬을 정의함 **/
$objPHPExcel->getActiveSheet()->getStyle('A1:H' . (count($tmpArray) + 1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A1:H' . (count($tmpArray) + 1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

/** 위에서 쓴 엑셀을 저장하고 다운로드 합니다. **/

header('Content-Type: application/vnd.ms-excel;charset=utf-8');
header('Content-type: application/x-msexcel;charset=utf-8');
header('Content-Disposition: attachment;filename="테스트엑셀파일.xls"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');


?>

완료 된 PHP 파일을 실행해서 엑셀파일을 다운로드 해보자.

그리고 실행해 보면 아래 와 같이 엑셀파일이 완성되었을 것입니다.