반응형
실제 상황의 필요 때문에 엑셀 양식을 도출하는 것은 백그라운드 개발 과정에서 자주 사용됩니다.다음은 PHP 엑셀의 지원이 필요한 실제 응용 프로그램에서 직접 분류한 Excel 유형입니다. 이 유형은 내보내기 양식의 기본 스타일, 경로 저장, 작업 기록 전환 기능을 잘 완성하여 여러분에게 도움이 되기를 바랍니다.
1:PHP 엑셀 지원 필요
2: 내보내기 시 워크북을 자동으로 전환할 수 있습니다. 기본 워크북은 2000개입니다. 테스트 결과 5000개 정도의 데이터 내보내기가 실패할 수 있으며 내보내기 시간이 오래 걸릴 수 있습니다.
워크북을 바꾸면 성공률을 높일 수 있고, 읽기 편하다
3: 필요한 파라미터가 전송되어야 하며, 반환된 값은 저장된 엑셀 주소이며, 링크는 다운로드 가능합니다
<?php
/**
* 공통 내보내기 클래스@author:zhaoyaei
* $column :내보낸 첫 줄 제목
* $result :내보낼 결과 세트
* $path :파일 저장 경로 내보내기
* $sheet_num :워크북당 최대 행 수 (선택 사항)
* @return :저장된 주소
*/
class Export{
public function __construct(){
//클래스 초기화, 관련 클래스 파일 가져오기
include "PHPExcel.php";
include "PHPExcel/IOFactory.php";
}
//내보내기 설정
public function createxcel($column,$result,$path,$sheet_num = null){
//데이터의 합법성을 검사하다
if(empty($column) || empty($path) || $path == "" || empty($result)){
return false;
}
//만약 데이터가 크다면, 박으로 나누어 내보낸다
if(empty($sheet_num) || $sheet_num <= 0){
$sheet_num = 2000;
}
$path = $this->check_encod("GBK",$path);
//PHP 엑셀 인스턴스 만들기
$objPHPExcel = new \PHPExcel();
//총 데이터 행 수 및 데이터 열 수
$arr_num = count($result);
$field_count = count($column);
//작업부 수, 작업부 수량이 너무 많아 석탄업에서 도출한 데이터 건수를 조절하여 작업부 수를 줄일 수 있다
$get_num = ceil($arr_num / $sheet_num);
if($get_num > 20){
return false;
}
//열 정보 생성
$ary = array("", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
for($i = 1;$i <= $field_count; $i++){
$ary_info[$i] = $ary[$i/27].$ary[$i%27];
$fieldwidth[$i-1] = 20; //기본 값은 열 너비 20를 설치하고 있다
}
//각 워크북을 순환합니다
for($sheet = 0;$sheet < $get_num; $sheet++){
//워크북 만들기, 시작 워크북 설정
$objPHPExcel->createSheet($sheet);
$Sheet = $objPHPExcel->setActiveSheetIndex($sheet);
//워크북 스타일 설정
$i = 1;
foreach ($column as $key => $value){
//첫 번째 줄 값 설정
$Sheet->setCellValue($ary_info[$i] .'1', $value);
//첫 번째 줄을 굵게 설정합니다
$objPHPExcel->getActiveSheet()->getStyle($ary_info[$i] .'1')->getFont()->setBold(true);
//행폭 설정
$objPHPExcel->getActiveSheet()->getColumnDimension($ary_info[$i] )->setWidth($fieldwidth[$i-1]);
$i = $i + 1;
}
//각 워크북에서 시작하는 행 수
$hang_num = 2;
//이 작업 북의 종료 행수부터 0
$end_num = 0;
//start_num 이 워크북 시작 줄 수
$start_num = $sheet*$sheet_num;
//각 내보내기 시작 줄과 끝 줄 수를 계산합니다(멀티 워크북 내보내기)
if($arr_num > ($start_num + $sheet_num)){
$end_num = $start_num + $sheet_num;
}else{
$end_num = $arr_num;
}
//순환 행수
for($i = $start_num; $i < $end_num; $i++){
//순환열수
for($j = 1;$j <= $field_count; $j++){
//데이터 쓰기
$Sheet->setCellValue($ary_info[$j].($hang_num)," ".$result[$i][$j]);
}
$hang_num++;
}
//sheet 이름 설정
$objPHPExcel->getActiveSheet($sheet)->setTitle('sheet'.$sheet,$sheet);
//sheet 시작 위치 설정
$objPHPExcel->setActiveSheetIndex($sheet);
}
//PHPExcel_IOFactory의 쓰기 함수를 통해 위의 데이터를 씁니다
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//시간대 설정
date_default_timezone_set("Asia/Shanghai");
//저장 후 저장 경로로 돌아가기
$objWriter->save($path);
return $this->check_encod("utf-8",$path);
}
public function check_encod($encod,$string){
//판단 문자 인코딩
$encode = mb_detect_encoding($string, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
if($encode != $encod){
$string = iconv($encode, $encod, $string);
}
return $string;
}
}
?>
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP 멀티프로세스 초탐 (1) | 2022.09.29 |
---|---|
php 상용 판단 함수 (0) | 2022.09.28 |
php 페이지 인코딩 및 문자 작업 (0) | 2022.09.28 |
PHP 미리 정의된 인터페이스의 ArrayAccess (0) | 2022.09.27 |
PHP의 Trait 특성 (0) | 2022.09.27 |