PHP#데이터Excel몇 가지 내보내기 전략
내보내기는 실제로 모든 유형에서 작동합니다. 백엔드 시스템은 비교적 일반적입니다. 일반적으로 excel에서 내보낸 데이터는 백업 및 초안용으로 더 많이 사용되어야 합니다. 백엔드 비즈니스 시스템에서 데이터를 내보낸 후 수동으로 간섭하는 것에 의존하는 현실은 매우 희박합니다. . .
데이터 내보내기와 같은 기능은 가능하면 캡슐화해야 합니다. 데이터 내보내기는 하나만 있으며 해당 값은 후속 조정 및 비즈니스 규칙 변경에 실제로 반영됩니다. 일반적인 응용 프로그램 시스템에 다양한 데이터 내보내기 요구 사항이 있는 경우 이는 이 응용 프로그램 시스템의 비즈니스 분석이 충분하지 않거나 매우 열악하다는 것을 의미합니다. 상황은 사용자와 데이터베이스 사이의 거리가 내보내기 버튼일 뿐입니다. . .
환경
1.PHP5.5.14 (cli) (구축일: 2014년 9월 9일 19:09:25)
2.PHP 엑셀 1.7.8(http://www.codeplex.com/PHPExcel)
처리 논리
사실 이러한 유형의 문제의 핵심은 내보내기 규칙을 어떻게 정의하는지, 정의된 규칙 세트가 비즈니스 프로세스에 적응할 수 있는지 여부입니다. 가장 기본적인 방법은 추상화하는 것입니다. 데이터 내보내기 프로세스를 3 기본 단계로 나눈 후 각 단계를 점진적으로 개선할 수 있습니다.
1. 수출 규칙 정의
2.비즈니스 데이터 및 수출 규칙의 적용
3.내보내기 규칙 분석 구성 Excel
예
이 예는 캡슐화 없이 기본 내보내기 기능을 구현하며 성능이나 기타 확장성 문제에 초점을 맞추지 않습니다.
<?php namespace org\ybygjy\comp\excel; /** * Excel组件封装 * <p>1.统一处理工程中针对excel的数据导出</p> * @author WangYanCheng * @version 2015-1-22 */ class ExcelComp { /** * 构造函数 */ public function __construct() { require_once 'org/ybygjy/library/excel/PHPExcel.php'; } /** * 测试入口 */ public function doTest() { //构造原始数据 $dataArray = $this->buildData(); //导出 $this->doExportData($dataArray); } /** * 解析传递的原始数据并导出 * @param $dataArr */ public function doExportData($dataArr) { $phpObjExcel = new \PHPExcel(); $worksSheet = $phpObjExcel->setActiveSheetIndex(0); //构造表头数据_Begin $tmpColTitles = []; $firstDataEntry = $dataArr[0]; //分配列索引 $colIndex = 0; foreach($firstDataEntry as $key => $val) { if (preg_match('/^_/', $key)) { continue; } if (is_array($val)) { //取array下的列名称 $val = $val[0]; $rowNums = count($val); foreach ($val as $innerKey => $innerValue) { $tmpColTitles[] = array( 'parentKey' => $key, 'key' => $innerKey, 'colIndex' => $colIndex ); $colIndex++; } } else { $tmpColTitles[] = array( 'key'=>$key, 'colIndex'=>$colIndex ); $colIndex++; } } for($i = 0; $i < count($tmpColTitles); $i++) { $tmpObj = $tmpColTitles[$i]; $key = $tmpObj['key']; $colIndex = $tmpObj['colIndex']; $worksSheet->setCellValueByColumnAndRow($colIndex,1,$key); } //构造表头数据_End //填充单元格数据 $currRow = 2; foreach ($dataArr as $dataEntry) { $mergeRow = $dataEntry['_DIMENSION']; foreach ($tmpColTitles as $colEntry) { $key = $colEntry['key']; $colIndex = $colEntry['colIndex']; $parentKey = (isset($colEntry['parentKey']) ? $colEntry['parentKey'] : null); if (empty($parentKey)) { $value = $dataEntry[$key]; if ($mergeRow == 1) { $worksSheet->setCellValueByColumnAndRow($colIndex, $currRow, $value); } else { $worksSheet->mergeCellsByColumnAndRow($colIndex, $currRow, $colIndex, ($currRow + $mergeRow - 1))->setCellValueByColumnAndRow($colIndex, $currRow, $value); } } else { $tmpDataArr = $dataEntry[$parentKey]; $innerRow = $currRow; for($index = 0; $index < count($tmpDataArr); $index++) { $innerDataEntry = $tmpDataArr[$index]; $value = $innerDataEntry[$key]; $worksSheet->setCellValueByColumnAndRow($colIndex, $innerRow, $value); $innerRow++; } } } $currRow += $mergeRow; } header('Content-Type: application/vnd.ms-excel'); header('Content-Type: application/force-download'); header('Content-Type: application/octet-stream'); header('Content-Type: application/download'); header('Content-Disposition: attachment;filename="HelloWord.xls"'); header('Cache-Control: max-age=0'); header('Cache-Control: max-age=1'); header('Cache-Control: no-cache, must-revalidate'); header('Pragma: public'); $objWriter = \PHPExcel_IOFactory::createWriter($phpObjExcel, 'Excel5'); $objWriter->save('php://output'); } /** * 构造测试数据 * @return multitype:multitype:string number multitype:multitype:string */ private function buildData() { $rtnData = array( array( 'name'=>'YanCheng_01', 'age'=>'20', 'addr'=>array( array( 'country'=>'China', 'province'=>'ShanDong' ), array( 'country'=>'China', 'province'=>'BeiJing' ) ), '_DIMENSION'=>2 ), array( 'name'=>'YanCheng_02', 'age'=>'21', 'addr'=>array( array( 'country'=>'China', 'province'=>'LanZhou' ), array( 'country'=>'China', 'province'=>'NingXia' ) ), '_DIMENSION'=>2 ), array( 'name'=>'YanCheng_03', 'age'=>'22', 'addr'=>array( array( 'country'=>'China', 'province'=>'JiaYuGuan' ) ), '_DIMENSION'=>1 ) ); return $rtnData; } }
위 내용은 내용의 측면을 포함하여 PHP# 데이터 Excel 내보내기에 대한 몇 가지 전략을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.