PHPExcel 사용하기 (3)

 

PHPExcel을 통해서 미리 만들어진 엑셀 파일을 불러다가 원하는 위치에 내용을 추가해보록 하겠습니다.

 

엑셀을 코드상에서 줄을 긋고 색을 칠하는 건 상당히 번거로운 일입니다.

그래서 미리 만들어진 문서 양식을 불러다가 값을 채워넣어보도록 하겠습니다.

 

 

0. 보충 설명

 

지난번에 작성했던 PHPExcel에서 소스를 제대로 넣었는데도, 내용이 추가되지 않는 경우가 있습니다.

그런 경우에는 파일 속성을 'UTF-8' 로 변환해주면 됩니다.

 

윈도우의 경우 기본이 EUC-KR 로 되어 있어서 한글이 제대로 인식되지 않는 문제가 있는 듯 합니다.

 

또는 아래와 같이 php 상단에 header를 추가해줍니다.

 

header("Content-Type: text/html; charset=utf-8");
header("Content-Encoding: utf-8");

 

 

1. 환경 설정

 

환경은 지난번과 동일하지만, 간단하게 한번 더 적어보도록 하겠습니다.

 

윈도우에서는 apmsetup 을 설치하여 웹 환경을 구성하였습니다.

 

기본 폴더인 C:\APM_Setup\htdocs 안에 PHPExcel 라이브러리 폴더를 복사하였습니다.

 

지난번에 썼던 코드를 재활용할 예정입니다.

 

C:\APM_Setup\htdocs\php_sample.php 파일을 아래와 같이 입력하였습니다.

 

<?php
    require_once 'PHPExcel/Classes/PHPExcel.php';
    $objPHPExcel = new PHPExcel();

    // 여기에 내용을 추가할 것입니다.

    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename=sample.xls');
    header('Cache-Control: max-age=0');
 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
 
    exit;
?>

 

 

2. 엑셀 양식 만들기

 

C:\APM_Setup\htdocs\ 안에 sample.xlsx 이라는 파일을 만들었습니다.

그리고 아래와 같이 테스트용 페이지를 만들었습니다.

 

 

국어, 영어, 수학 아래 빨간색으로 표시된 셀 번호에 값을 넣어볼 것입니다.

 

 

3. 코드 작성

 

읽어오려는 파일을 먼저 선택해줍니다.

현재 php 파일과 동일한 경로에 있으니, 경로를 제외한 파일명을 적어주었습니다.

 

$file = 'sample.xls';

 

$objReader 변수를 하나 만들어서 파일을 읽어오도록 합니다.

createReaderForFile 은 파일의 형식을 인식하여 자동으로 읽어옵니다.

 

그 다음 $objPHPExcel 에load 명령으로 파일을 불러와서 저장하도록 합니다.

 

$objReader = PHPExcel_IOFactory::createReaderForFile($file);
$objPHPExcel = $objReader->load($file);

 

이제 $objPHPExcel 안에는 위에서 만든 sample.xslx 데이터가 들어가 있습니다.

 

혹시, 파일 형식을 제대로 읽어드리지 못한다면 아래와 같이 양식을 직접 입력해줄 수도 있습니다.

 

$objReader = PHPExcel_IOFactory::createReader('Excel2007');

 

이제 엑셀에 값을 입력해보도록 합니다.

아래 그림과 같이 A3, B3, C3 안에 값을 넣을 것입니다.

 

 

 

제일 먼저 setActiveSheetIndex 으로 활성화된 시트를 선택해줍니다. 기본이니 0으로 설정합니다.

 

$objExcel->setActiveSheetIndex(0)

 

그 다음 뒤에 이어서 setCellValue에 셀번호와 값을 입력해줍니다.

 

$objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue("A3", 90)
                ->setCellValue("B3", 80)
                ->setCellValue("C3", 70);

 

이대로 하면 정해진 셀 위치에 값을 넣을 것입니다.

 

 

4. 테스트

 

웹 브라우저 주소창에 아래와 같이 입력을 합니다.

코드에 문제가 없다면 엑셀 파일이 다운로드 될 것입니다.

 

 

 

이제 엑셀 파일을 열어보면 입력했던 값이 그대로 들어간 것을 확인할 수 있습니다.

 

 

 

5. 전체 소스

 

 

<?php

    require_once 'PHPExcel/Classes/PHPExcel.php';
    
    $objPHPExcel = new PHPExcel();
    
    $file = 'sample.xlsx';
    
    $objReader = PHPExcel_IOFactory::createReaderForFile($file);
    $objPHPExcel = $objReader->load($file);

    
    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue("A3", 90)
                ->setCellValue("B3", 80)
                ->setCellValue("C3", 70);
    
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename=sample.xls');
    header('Cache-Control: max-age=0');
    
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    
    exit;
?>

 

 

마치며...

 

테스트 할 때는 간단한 내용만 입력했는데, 실제 업무상 사용할 수 있는 복잡한 서식의 문구를 채우거나 PHP 에서는 값만 입력하고 엑셀의 계산 기능을 활용하는 등(또는 PHP에서 바로 계산하여) 엑셀로 바로 출력해보는 것도 좋을거 같습니다.

 

PHPExcel 기능을 마치면서 PDF 출력까지 해보려고 했으나, 한글 인코딩 문제에 걸려서 나중에 해결 후에 올리도록 하겠습니다. ^^*