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;
?>
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

PHP

번호 제목 글쓴이 날짜 조회수
17 [PHP] 구글 캡차(Captcha) 달기 - V3, V2 버전 관리자 12-12 22
16 PhpSpreadsheet 설정 샘플 코드 관리자 06-21 255
15 PHP & JavaScript 엑셀 파일 다운로드 및 업로드 구현 (PhpSpreadsheet 사용) 관리자 06-21 256
14 PHP 스크립트에서 JSON 반환하기 관리자 11-26 2,534
13 PhpSpreadsheet 설치 및 사용법 정리 관리자 11-07 550
12 PHP 프로그램에서 BULK INSERT 문장을 만드는 방법 관리자 07-07 508
11 PHP 문자 암호화하여 Form 전송하기 관리자 07-07 482
10 전화번호 체크하기(휴대전화, 유선, 대표번호 등등) 관리자 07-03 434
9 get vimeo thumb 관리자 04-14 447
8 PHP 에서 MySQL 사용하기 (연결, DB&테이블 생성, 데이터 삽입/선택) 관리자 04-13 602
7 [PHP] 특정 영역 자동 스크린샷 저장 후 가장 최신 이미지 DB 저장 관리자 03-15 518
6 GD PHP TEXT ALIGN 한글 관리자 03-14 423
5 [PHP] 이미지파일에 텍스트 넣기 (라이브러리) 관리자 03-12 756
4 PHP 이미지 워터마크(텍스트&이미지) 삽입하기 관리자 03-11 425
3 한글 종성유무에 맞는 조사(은/는/이/가/을/를/과/와) 변환 관리자 06-22 662
2 한국어 조사 처리 함수 관리자 04-08 760
1 PHP 에서 callback 함수를 이용하여서 mysql select row 함수 개발하는 방법 관리자 10-22 919