환경은 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으로 빨강색의 배경색이 됩니다.
'IT 공부 > PHP' 카테고리의 다른 글
[ PHP ] cURL이용하여 API통신하기 (0) | 2022.09.02 |
---|---|
[ PHP ] ImageMagick을 이용하여, PDF파일을 image로 변경 또는 그 반대 (0) | 2022.07.13 |
[ PHP ] PDF파일의 페이지 수를 알아내는 법 (0) | 2022.07.06 |
[ PHP ] Selenium사용해서, 브라우저 자동화 테스트하기 (0) | 2022.06.14 |
[ PHP ] PDF 파일을 이미지 파일로 ( convert PDF to image ) (0) | 2022.06.01 |