PhpSpreadSheet를 이용하여, Excel파일 일기 / 쓰기
환경은 codeigniter 4에서, excel 파일에대해 읽기 쓰기를 하기위한 코드입니다.
public function import() {
$file = $this->request->getFile('file');
$extension = $file->getClientExtension();
$randomName = $file->getRandomName();
$file->move($randomName);
$reader = '';
switch ($extension) {
case "xlsx":
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
break;
case "xls":
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
break;
}
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($randomName);
$sheetData = $spreadsheet->getSheet(0)->toArray();
}
Excel파일을 읽어, Spreadsheet객체 생성
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load(file);
switch문을 이용해서, 확장자에 따라 다른 Reader를 통해서 파일을 load하도록 하는 과정
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
IOFactory를 사용하면, 자동적으로 확장자에 맞는 spreadsheet를 만드는 것도 가능합니다.
sheet의 데이터를 읽기
$sheetData = $spreadsheet->getSheet(0)->toArray();
getSheet(0) 를 통해서, 첫 번째 sheet를 가르키게 됩니다.
getActiveSheet()를 사용하면, 활성화된 sheet를 선택하게 됩니다. (활성화된 sheet는, Excel 저장시에 선택된 sheet)
getSheetByName()를 사용하면, sheet의 이름으로 선택이 가능합니다.
그 밖에도, setActiveSheetIndex() 및 setActiveSheetIndexByName()등이 존재
새로운 sheet 생성
$sheet = $spreadsheet->createSheet();
데이터를 작성하기 위한, 새로운 sheet를 생성
sheet 이름 설정
$spreadsheet->setTitle('new sheet');
sheet의 이름을 지정하는 것도 가능 ( 지정하지 않으면 Worksheet가 디폴트)
cell에 데이터 쓰기
$sheet->setCellValue("A1", "value");
setCellValue()를 사용하여, 원하는 셀에 데이터를 입력할 수 있습니다.
첫 번째, 파라미터로는 셀의 위치 (A1)
두 번째, 파라미터로는 입력 데이터 (value)
cell에 데이터와 데이터 타입 설정
$sheet->getCell("A1")->setValueExplicit("0123457", DataType::TYPE_STRING);
원하는 셀에 데이터와 데이터 타입을 설정하고 싶은 경우에 사용합니다.
왜 굳이 데이터의 타입을 설정해야하냐면, 위와같이 데이터가 숫자형식인 경우에는 excel이 자동적으로 데이터 타입을 숫자로 인식하여 맨 앞에 "0"가 있는 경우 자동적으로 삭제가 됩니다. 그러한 경우를 막기위해서 string타입이라는 것을 명시합니다.
여러가지 스타일 변경
수평정렬
$sheet->getStyle('A:D')->getAlignment()->setHorizontal('center');
수직정렬
$sheet->getStyle('A:D')->getAlignment()->setVertical('center');
행 너비
$sheet->getColumnDimension('A')->setWidth(120, 'pt');
원하는 행의 너비를 지정할 수 있고, 값과 단위*를 지정할 수 있습니다.
*단위
pt (points), px (pixels), pc (pica), in (inches), cm (centimeters) and mm (millimeters)
열 높이
$sheet->getDefaultRowDimension()->setRowHeight(20);
각 열의 높이를 지정할 수 있습니다.
sheet 줌
$sheet->getSheetView()->setZoomScale(125);
확대 / 축소를 할 수 있고, 125% 확대를 의미
폰트 지정
$spreadsheet->getDefaultStyle()->getFont()->setName('Meiryo');
원하는 폰트를 지정할 수 있습니다 .
셀 배경색 변경
$sheet->getStyle("A1:C1")
->getFill()
->setFillType(Fill::FILL_SOLID)
->getStartColor()
->setARGB(FFFF0000);
getStyle()를 통해서 원하는 구역을 설정하고,
배경색은 ARGB로써 입력, 즉 FFFF0000는 alpha값이 255, R 255, G 0, B 0으로 빨강색의 배경색이 됩니다.