개인적으로 사용하는 동안 나중에 참고할 수 있도록 PHPExcel 사용 경험을 저장합니다.
PHP의 Yii 프레임워크와 결합하면 쉽게 사용할 수 있습니다. 그리고 인터넷에서 언급되는 Yii의 자동 로딩 파일과 기타 방법을 수정할 필요가 없습니다.
구체적인 사용법:
phpoffice http://phpexcel.codeplex.com/releases/view/119187 다운로드
다운로드 후 첫 번째 수준 디렉터리 구조는 Classes, Documentation, 예제,changelog.txt, install입니다. .txt, License.txt.
다운로드 후 해야 할 일은 Yii가 PHPExcel을 로드하도록 하는 것입니다. lele은 yii2-swiftmailer의 로딩 방법을 모방하고 프로젝트 루트 경로 아래에 작곡가.json을 수정하고 "phpoffice/phpexcel을 추가합니다. "require" dev-develop"에서 ": "를 입력한 다음 명령줄을 사용하여 루트 디렉터리에 들어가서 작곡가 업데이트를 실행합니다. (phpexcel을 수동으로 다운로드할 필요가 없는 것 같으니 작곡가가 자동으로 다운로드합니다...) 이후 완료되면 PHP에서 $PHPExcel = new PHPExcel();을 사용하여 인스턴스를 얻을 수 있습니다. 새로 추가할 때 반드시 추가해야 한다는 점을 기억하세요. 그렇지 않으면 클래스를 찾을 수 없다는 오류가 발생합니다(lele은 클래스를 추가해야 하는 이유를 모릅니다.
아시는 분은 댓글로 알려주세요.)
작동한 후 몇 가지 사용 코드를 작성하세요.
$filePath = "../file/test.xlsx"; // 읽을 파일의 경로
$PHPExcel = new PHPExcel( ); // 예제를 가져와서 나중에 사용하세요
$PHPReader = new PHPExcel_Reader_Excel2007() // 리더는 Excel 파일을 읽는 데 매우 중요합니다.
if (!$PHPReader->canRead($ filePath) ) { // 여기서는 Reader를 사용하여 파일 읽기를 시도합니다. 07이 작동하지 않으면 05를 사용합니다. 05가 작동하지 않으면 오류가 보고됩니다. 여기로 돌아가는 것은 Yii 프레임워크의 방식입니다.
$PHPReader = new PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($filePath)) {
$errorMessage = "파일을 읽을 수 없습니다.";
return $this- >render('error', ['errorMessage' => $errorMessage]);
}
}
$PHPExcel = $PHPReader->load($filePath) // 리더가 읽습니다. out 그런 다음 Excel 인스턴스에 로드합니다.
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -*- *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -*- *-*-*-
위 내용은 엑셀을 읽어도 충분합니다. 다음으로 이 2차원 테이블을 순회하여 출력합니다. PHPExcel의 메소드 이름은 상대적으로 의미가 있습니다.
$allSheet = $PHPExcel->getSheetCount(); // 시트 수
$currentSheet = $PHPExcel->getSheet(0) // 첫 번째 시트 가져오기(워크북?)
$ allColumn = $currentSheet->getHighestColumn(); // AU와 같은 가장 높은 열입니다. 열은 A에서 시작합니다.
$allRow = $currentSheet->getHighestRow(); // 12980과 같은 가장 큰 행입니다. 행은 0부터 시작합니다
$result = new ReadFileResult(); // result는 결과를 저장하기 위해 작성한 엔터티 클래스입니다
for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
echo $currentRow;
$lineVal = [];
for ($currentColumn="A"; $currentColumn <= $allColumn; $currentColumn++) {
$val = $currentSheet- > ;getCellByColumnAndRow(ord($currentColumn) - 65, $currentRow)->getValue(); // ord는 문자를 ASCII 코드 A->65, B->66으로 변환합니다.... 여기서 함정은 AU 때문입니다. ->65이면 다음 U가 계산되지 않으므로 인덱스 순회에 결함이 있습니다.
array_push($lineVal, $val);
}
array_push($result->content, $lineVal);
}
개발 문서를 살펴보니 다른 두 가지 매우 좋은 것 탐색 방법이 사용되었습니다.
1. toArray를 사용하여 이 시트를 2차원 배열로 변환합니다.
$currentSheet->getStyle('A2:A6')->getNumberFormat()->setFormatCode('yyyy-mm-dd') // A2에서 A6으로 시간 형식으로 변환
$ result->content = $currentSheet->toArray('', true, true); // PHPExcel에 포함된 행 및 열 반복자를 사용하여 현재 시트를 2차원 배열로 변환합니다.
2. 이것은 훨씬 더 안전할 것입니다.
foreach ($currentSheet->getRowIterator() as $row) { // 행 반복자
$cellIterator = $row->getCellIterator() // 행의 셀 반복자를 가져옵니다
$ cellIterator->setIterateOnlyExistingCells(false); // 셀에 값이 없더라도 모든 셀을 순회하도록 셀 반복자를 설정합니다.
$lineVal = [];
foreach ($cellIterator as $cell) {
if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_NUMERIC) { // 셀의 데이터 타입이 숫자인지 비교합니다
$cellStyleFormat = $cell->getStyle( $cell- >getCoordinate( ) )->getNumberFormat(); // 다음 두 문장은 이 숫자의 형식을 가져오는 것입니다.
$formatCode = $cellStyleFormat->getFormatCode() // 일반 숫자인 경우 , formatCode는 General 입니다. 6/12/91 12:00과 같은 시간 형식인 경우 formatCode는 /d/yy h:mm입니다(어쨌든 시간 형식입니다)
| $cell->getCoordinate() . " " . $ formatCode; echo "
";
if (preg_match("/m/d/yy h:mm/i", $formatCode)) 🎜> $value = gmdate("Y-m-d H:i: s", PHPExcel_Shared_Date::ExcelToPHP($cell->getValue())) // 형식에 따라 Excel 시간을 PHP로 변환하는 시간입니다. 🎜> $value = $cell-> ;getValue () I ') {// 열 좌표 가져오기
$ value = "0". $ Value; value.". $ Cell-& gt; getcolumn ()) ;
}
array_push($result->content, $lineVal);
}
lele이 PHPExcel 클래스 요약을 보았습니다. yanhui_wei의 기사에서 가져온 메소드와 잘 작성되었습니다. 특별 발췌:
일반적인 Excel 보고서 작업을 위해서는 다음 클래스 라이브러리를 마스터해야 합니다.
(1) PHPExcel: 통합 문서 개체
엑셀 문서 처리 객체를 주로 사용합니다. 엑셀 문서를 어떻게 관리하나요(속성과 메소드를 통해 관리하나요?) 우리 모두 알고 있듯이 클래스는 주로 속성과 메소드로 구성됩니다. PHP 프로그램을 통해 Excel 문서를 관리하는 것은 실제로 이 객체의 속성과 메소드를 통해 관리됩니다. 그리고 메서드는 주로 Excel 문서의 이러한 측면을 관리하는 데 사용됩니다.
getProperties(): 현재 활성화된 워크시트의 속성 개체를 가져오고 속성 개체를 반환합니다.
getActiveSheet(): 현재 활성화된 워크시트를 가져오고, Worksheet 개체를 반환합니다.
getActiveSheetIndex(): 현재 활성 워크시트의 인덱스 값을 가져오고 int를 반환합니다.
setActiveSheetIndex(): 현재 활성 워크시트의 인덱스를 설정하고 워크시트 개체를 반환합니다.
getSheetByName(): 통과 워크시트 이름이 가져옵니다. 현재 워크시트 객체를 반환하고 워크시트 객체를 반환합니다.
getDefaultStyle(): Excel 문서의 기본 스타일(모든 워크시트의 스타일)을 가져오고 스타일 객체를 반환합니다.
createSheet(): 현재 활성 워크시트 뒤에 new worksheet
getSheetCount(): Excel 문서의 워크시트 수를 가져오고 int를 반환합니다.
getSheetNames(): Excel 문서의 모든 워크시트 이름 배열을 가져옵니다
(2) PHPExcel_Worksheet: Worksheet 개체
워크시트 개체는 주로 워크시트를 관리하는 데 사용됩니다. 어떻게 관리하나요?속성과 메소드를 통해서도 관리되지만 대부분의 경우 엑셀 문서 객체를 통해 워크시트 객체를 얻을 수 있습니다.
toArray(): 워크시트의 데이터를 배열로 변환
fromArray():에서 가져옵니다. 배열 워크시트에 데이터를 채우고 워크시트 객체를 반환
getCell(): 셀 객체를 가져옵니다
getCellByColumnAndRow(): 열 인덱스와 행 인덱스를 통해 지정된 셀을 가져와 셀 객체를 반환
getDefaultStyle(): 워크시트의 기본 스타일을 가져오고 스타일 개체를 반환합니다.
getHighestColumn(): 워크시트의 최대 열을 가져오고 열 이름을 반환합니다.
getColumnDimension(): 현재 열을 가져옵니다.
getStyle(): 지정된 셀 스타일을 가져오고, 스타일 개체를 반환합니다.
getParent(): 상위 클래스 개체를 가져오고, Excel 문서 개체를 반환합니다.
getTitle(): 워크시트의 제목이나 이름을 가져오고, 반환합니다. 문자열 유형
setCellValue(): 셀을 설정합니다. 값은 워크시트 개체 또는 셀 개체를 반환하며, 매개변수의 값에 전적으로 의존합니다.
setCellValueByColumnAndRow(): 열 인덱스를 통해 셀의 값을 설정하고 행 인덱스, 반환 유형은 위와 같습니다
setCellValueExplicit(): 셀 값을 설정하고 지정된 데이터 유형을 표시하여 워크시트 객체를 반환합니다.
setCellValueExplicitByColumnAndRow(): 열과 행을 통해 셀 값을 설정합니다. index
setTitle(): 워크시트 제목 설정
(3) PHPExcel_Cell: 셀 객체
(4) PHPExcel_Style: 스타일 객체, 주로 셀 스타일을 설정하는 데 사용: 정렬, 글꼴, 테두리 , 채우기 등 이전에 배운 CSS 스타일과 유사합니다. 여기에서 설정하려면 정렬, 글꼴 크기, 테두리 색상 등이 모두 스타일 개체를 통해 수행됩니다.
getActiveCell(): 이름 가져오기 현재 활성 셀 및 반환 문자열(예: A1
getActiveSheet(): 현재 활성 워크시트를 가져오고 워크시트 개체를 반환합니다.
getAlignment(): 정렬 개체를 가져오고 정렬 개체를 반환합니다
getBorders(): 테두리 객체 가져오기, 테두리 객체 반환
getFill(): 채우기 객체 가져오기
getFont(): 글꼴 객체 가져오기
setFont(): 글꼴 설정 및 스타일 객체 반환
(5) PHPExcel_Style_Alignment: 정렬 객체
getHorizontal(): 수평 센터링 방법 가져오기
getVertical(): 수직 센터링 방법 가져오기
setHorizontal(): 수평 센터링 방법 설정, 정렬 반환 object
setVertical(): 수직 센터링 방법 설정, 정렬 개체 반환
센터링 방법:
HORIZONTAL_CENTER
HORIZONTAL_CENTER_CONTINUOUS
HORIZONTAL_GENERAL
HORIZONTAL_JUSTIFY
HORIZONTAL_LEFT
HORIZ ONTAL_RIGHT
VERTICAL_BOTTOM
VERTICAL_CENTER
VERTICAL_JUSTIFY
VERTICAL_TOP
(6)PHPExcel_Style_Font: 글꼴 개체
setBold(): 글꼴 굵게 설정
setColor(): 글꼴 색상 설정
setItalic() : 글꼴 기울임꼴 설정
setName(): 글꼴 이름 설정
setSize(): 글꼴 크기 설정
setUnderline() : 글꼴 밑줄 설정
(7) PHPExcel_Writer_Excel5: 쓰기 작업 개체, 주로 출력에 사용됩니다. xls files
save(워크북 파일명): 워크북 개체의 데이터를 워크북 파일로 저장
(8) PHPExcel_Writer_Excel2007: 쓰기 작업 개체, 주로 xlsx 파일 출력에 사용됩니다.
save(워크북 파일 이름) : 워크북 객체의 데이터를 워크북 파일로 저장
(9) PHPExcel_Reader_Excel5: 읽기 작업 객체, 주로 xls 파일 입력에 사용
canRead(): 현재 리더 객체가 워크북 파일을 읽을 수 있는지 여부
load(): 통합 문서 파일에서 통합 문서 개체를 로드합니다. 즉, 관리를 위해 데이터가 통합 문서 개체에 로드됩니다.
(10) PHPExcel_IOFactory: 읽기 및 쓰기 작업 개체
createReader(): 다른 읽기를 생성합니다. 다양한 매개변수에 따른 객체: 주요 함수는 통합 문서 파일의 데이터를 읽는 것입니다.
createWriter(): 다양한 매개변수에 따라 다양한 쓰기 객체를 반환합니다. 주요 함수는 PHPExcel 통합 문서 객체의 데이터를 통합 문서에 쓰는 것입니다. file
load(): 통합 문서 파일 PHPExcel 통합 문서 개체에서 로드합니다. 즉, 관리를 위해 통합 문서 파일의 데이터를 PHPExcel 통합 문서 개체로 로드합니다.
PHPExcel 개체: 통합 문서 개체입니다
include_once " PHPExcel/Writer/Excel5.php";//주로 파일 이름 접미사가 xls인 다른 하위 버전의 파일에 사용됩니다. 접미사가 xls 형식인 Excel 파일을 생성하려면 해당 라이브러리를 도입하는 것이 좋습니다
include_once "PHPExcel/Writer/Excel2007.php";//주로 파일 이름 접미사가 xlsx인 Excel2007 형식의 Excel 파일에 사용됩니다. 접미사가 xlsx 형식인 Excel 파일을 생성하려면 이러한 라이브러리를 도입하는 것이 좋습니다. 🎜>$objWriter = new PHPExcel_Writer_Excel5($objExcel);//파일 형식 쓰기 개체 인스턴스를 생성합니다. 이 개체는 접미사 이름이 있는 Excel 파일에 콘텐츠를 쓰는 것과 같이 지정된 형식으로 파일에 콘텐츠를 쓰는 데 주로 사용됩니다. xls 형식 등이며 다른 형식에도 사용됩니다
$objWriter = new PHPExcel_Writer_Excel2007($objExcel);//파일 형식 쓰기 개체 인스턴스를 생성합니다. 이 개체는 접미사 이름이 xls 형식인 Excel 파일에 콘텐츠를 쓰는 것과 같이 지정된 형식으로 파일에 콘텐츠를 쓰는 데 주로 사용됩니다. , etc., excel2007 형식에 사용
$objWriter->setOffice2003Compatibility(true);//office2003과 호환
//문서의 기본 속성 설정
$objProps = $objExcel->getProperties (); //PHPExcel_document 문서 객체 가져오기
$objProps->setCreator("Zeal Li"); //작성자 설정
$objProps->setLastModifiedBy("Zeal Li") // 마지막 수정 시간
$objProps- >setTitle("Office XLS Test Document"); //제목 설정
$objProps->setSubject("Office XLS Test Document, Demo"); theme
$objProps->setDescription( "PHPExcel에서 생성된 테스트 문서.");//Description
$objProps->setKeywords("office excel PHPExcel") //Keywords
$objProps ->setCategory("Test"); //Category
$objExcel->setActiveSheetIndex(0);//Excel 파일을 열 때 사용자가 보는 첫 번째 시트를 설정합니다. 설정하지 않은 경우 기본값은 마지막 시트 작동
$objActSheet-> ;setTitle('Test Sheet');//현재 활성화된 통합 문서의 이름 설정
//셀 이름을 기준으로 셀 내용을 설정하면 PHPExcel이 자동으로 시트를 결정합니다. 들어오는 내용을 기반으로 한 셀의 내용 유형
$ objActSheet->setCellValue('A1', 'String content') // 문자열 내용
$objActSheet->setCellValue('A2', 26) ; // 값
$objActSheet-> setCellValue('A3', true); // 부울 값
$objActSheet->setCellValue('A4', '=SUM(A2:A2)'); // 수식
/명시적으로 셀 지정 콘텐츠 유형은 문자열 유형
$objActSheet->setCellValueExplicit('A5','847475847857487584',PHPExcel_Cell_DataType::TYPE_STRING);
//셀 병합
$objActSheet->mergeCells(' B1:C22');
//열 너비 설정
$objActSheet->getColumnDimension('B')->setAutoSize(true);
$objActSheet->getColumnDimension('A' )->setWidth(30);
//행 높이 설정
$objPHPExcel->getActiveSheet()->getRowDimension('2')- >setRowHeight(11.5);
/ /Format: 글꼴 설정, 정렬 설정, 테두리 설정 등 셀을 조작하는 데 주로 사용됩니다.
$objStyleA5 = $objActSheet->getStyle('A5') ;//셀 A5 스타일 가져오기
//셀 글꼴 설정
$objFontA5 = $objStyleA5->getFont() //글꼴 가져오기
$objFontA5->setName( '宋体');//글꼴 이름 설정
$objFontA5->setSize(10); //글꼴 크기 설정
$objFontA5->setBold(true); 굵은 글씨
$objFontA5->getColor()-> setARGB('FF999999');//글꼴 색상 설정
//셀 정렬 설정
$objAlignA5 = $objStyleA5-> getAlignment();//정렬 가져오기
$objAlignA5-> ;setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);//가로 오른쪽
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//세로 중심
//셀 테두리 설정
$objBorderA5 = $objStyleA5->getBorders();//테두리 가져오기
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //테두리 스타일
$objBorderA5->getTop() ->getColor()->setARGB('FFFF0000');//상단 테두리 색상
$objBorderA5->getBottom() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5- >getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//왼쪽 스타일
$objBorderA5->getRight()-> ;setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//오른쪽 스타일
/ /셀 채우기 색상 설정
$objFillA5 = $objStyleA5->getFill();//채우기
$objFillA5-> ;setFillType(PHPExcel_Style_Fill::FILL_SOLID);//채우기 유형
$objFillA5 ->getStartColor()->setARGB('FFEEEEEE');
//셀 값 계산
$objPHPExcel ->getActiveSheet()->setCellValue('B7', '=SUM( B5:C5)');
$objPHPExcel->getActiveSheet()->getCell('B7')->getCalculatedValue ();
//셀의 값을 얻으려면 먼저 워크시트의 getCell 메소드를 통해 셀 객체를 얻은 다음 셀의 getValue 메소드를 통해 셀의 값을 얻어야 합니다. 계산을 통해 셀의 값을 구하는 경우에는 getCalculatedValue 메소드를 사용하여 셀의 값을 구해야 합니다. 셀의 값을 설정하려면 워크시트의 setCellValue 메소드를 통해서만 설정하면 됩니다. 🎜>//$dateTimeNow=time();
$objPHPExcel->getActiveSheet()->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));//41105.75
$objPHPExcel->getActiveSheet()->getStyle('C10') ->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);//18:00:54, 표시 방법만 변경해도 원래 값의 유형은 변경되지 않습니다.
echo gettype($objPHPExcel- > getActiveSheet()->getCell('C10')->getValue());//double
echo $objPHPExcel->getActiveSheet()->getCell('C10')->getValue() ;//41105.75
//'2010-10-21'은 따옴표 안에 넣어야 합니다. 그렇지 않으면 표시되는 값은 1979입니다. 텍스트(권장)
$objPHPExcel->setActiveSheetIndex(0)-> ;setCellValueExplicit ("D1", '2010-10-21', PHPExcel_Cell_DataType::TYPE_STRING); //특징: 문자열 유형이 왼쪽에 표시됩니다
//새 워크시트 추가
$objExcel-> ;//새 워크시트 만들기
$objExcel->getSheet(1)->setTitle('Test 2');//현재 워크시트의 제목 설정
//유닛 그리드 보호
$objExcel->getSheet(1)->getProtection()->setSheet(true)
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel') ;
//내용을 엑셀 파일로 출력하고 서버에 파일을 저장
$objWriter->save("test.xls");
//브라우저에 내용 강제 출력
헤더( "콘텐츠 유형: 애플리케이션/강제 다운로드");
header("콘텐츠 유형: 애플리케이션/옥텟-스트림")
header("콘텐츠 유형: 애플리케이션/다운로드"); 🎜>header('Content-Disposition:inline;filename="'.$outputFileName.'"');
header("Content-Transfer-Encoding: 바이너리")
header( "만료일: 월, 1997년 7월 26일 05:00:00 GMT");
header("최종 수정: " . gmdate("D, d M Y H:i:s") . " GMT");
header("캐시 -제어: 필수 재검증, 사후 검사=0, 사전 검사=0");
header("Pragma: no-cache");
$objWriter->save( 'php:// 출력');//매개변수 - 클라이언트 다운로드를 위해 브라우저에 직접 출력을 의미합니다
//excel 읽기 개체
$PHPReader = new PHPExcel_Reader_Excel5();//Excel 파일 만들기 읽기 개체
$PHPExcel = $PHPReader->load($filePath);//Excel 테이블을 읽고 Excel 파일 객체를 반환합니다.
$currentSheet = $PHPExcel->getSheet(0) //Excel 파일의 첫 번째 워크시트를 읽습니다.
$allColumn = $currentSheet->getHighestColumn();//E와 같이 현재 워크시트의 가장 큰 열 번호를 가져옵니다.
$allRow = $currentSheet ->getHighestRow();//총계 가져오기 현재 워크시트의 행 수
//통합 문서의 기본 스타일 설정
$objPHPExcel->getDefaultStyle()->getFont()->setName( 'Arial');
$ objPHPExcel->getDefaultStyle()->getFont()->setSize(8)
//셀 병합
$objPHPExcel->getActiveSheet()- >mergeCells('A18:E22') ;