thinkphp 프레임워크를 사용합니다
배달원이 상품을 배송한 후 사용자에게 하나씩 알림 문자 메시지를 보내야 하는 경우가 있어서 효율성이 너무 낮기 때문에 효율성을 줄이기 위해 템플릿 문자 메시지를 생각했습니다
. Issues, I 이렇게 설계되어 있는데 엑셀을 가져와서 phpExcel로 파싱해서 이름, 전화번호, 주문번호, 주문 유형
을 일치시킨 뒤 사용자에게 알림 문자를 보내고, 다른 주문 문의 주소를 보냈다. 그리고 주문 유형에 따른 알림 정보
----------------------------------------- --------- --------------- --------- -------------
이 글은 주로 제가 PHPExcel 프로세스를 사용하는 내용을 기록한 글입니다.
본 글은 Yuanchuang이 아니며, 훌륭한 고수님들의 글을 많이 읽어보고 작성한 글이며, 심지어 코드까지 복사한 글이므로 구체적인 원문은 기록하지 않았습니다.
이 글은 단지 여러분의 녹음과 공부를 위한 것입니다
---------------------------- ------ ------------------ ------ ------------------ ------
1: PHPExcel 다운로드
공식 웹사이트에서 다운로드할 수 있으며, http://download.csdn.net 문서도 업로드했습니다. /detail/fei003/9851672
2 프로젝트에 PHPExcel 넣기
압축 해제된 PHPExcel 파일을 Thinkphp/Library /Vendor에 넣기
3 작업 방법을 함수(또는 클래스 라이브러리)에 캡슐화하여 직접 사용하기 쉽도록
excel.PHP 함수
<?php /** * Created by PhpStorm. * User: 飞 * Date: 2017/6/13 * Time: 10:20 * 导入excel文件,对表格进行解析 */ function importExecl($file,$filetype){ if(!file_exists($file)){ return array("error"=>0,'message'=>'file not found!'); } // 判断文档类型,使用相应的方法,可以解析多种文件,这只是判断两个,其余的自己判断 if($filetype == 'xlsx'){ $filetype = 'Excel2007'; }elseif($filetype == 'xls'){ $filetype = 'Excel5'; } // 引入扩展 Vendor("PHPExcel.PHPExcel.IOFactory"); $objReader = \PHPExcel_IOFactory::createReader($filetype); try{ $PHPReader = $objReader->load($file); }catch(Exception $e){} if(!isset($PHPReader)) return array("error"=>0,'message'=>'read error!'); // 获得所有的sheets表格 $allWorksheets = $PHPReader->getAllSheets(); $i = 0; //对sheet表格遍历分析 foreach($allWorksheets as $objWorksheet){ // 获得sheet表格的标题 $sheetname=$objWorksheet->getTitle(); // 获得总行数 $allRow = $objWorksheet->getHighestRow(); $highestColumn = $objWorksheet->getHighestColumn(); // 获得总列数 $allColumn = \PHPExcel_Cell::columnIndexFromString($highestColumn); $array[$i]["Title"] = $sheetname; $array[$i]["Cols"] = $allColumn; $array[$i]["Rows"] = $allRow; $arr = array(); // 对合并的单元格进行分析 $isMergeCell = array(); foreach ($objWorksheet->getMergeCells() as $cells) {//merge cells foreach (\PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) { $isMergeCell[$cellReference] = true; } } for($currentRow = 1 ;$currentRow<=$allRow;$currentRow++){ $row = array(); for($currentColumn=0;$currentColumn<$allColumn;$currentColumn++){; $cell =$objWorksheet->getCellByColumnAndRow($currentColumn, $currentRow); $afCol = \PHPExcel_Cell::stringFromColumnIndex($currentColumn+1); $bfCol = \PHPExcel_Cell::stringFromColumnIndex($currentColumn-1); $col = \PHPExcel_Cell::stringFromColumnIndex($currentColumn); $address = $col.$currentRow; $value = $objWorksheet->getCell($address)->getValue(); if(substr($value,0,1)=='='){ return array("error"=>0,'message'=>'can not use the formula!'); exit; } if($cell->getDataType()==\PHPExcel_Cell_DataType::TYPE_NUMERIC){ // $cellstyleformat=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat(); // $formatcode=$cellstyleformat->getFormatCode(); if (preg_match('/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i', $formatcode)) { $value=gmdate("Y-m-d", \PHPExcel_Shared_Date::ExcelToPHP($value)); }else{ $value=\PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode); } } if($isMergeCell[$col.$currentRow]&&$isMergeCell[$afCol.$currentRow]&&!empty($value)){ $temp = $value; }elseif($isMergeCell[$col.$currentRow]&&$isMergeCell[$col.($currentRow-1)]&&empty($value)){ $value=$arr[$currentRow-1][$currentColumn]; }elseif($isMergeCell[$col.$currentRow]&&$isMergeCell[$bfCol.$currentRow]&&empty($value)){ $value=$temp; } $row[$currentColumn] = $value; } $arr[$currentRow] = $row; } $array[$i]["Content"] = $arr; $i++; } // spl_autoload_register('Think');//must, resolve ThinkPHP and PHPExcel conflicts unset($objWorksheet); unset($PHPReader); unset($PHPExcel); unlink($file); return array("error"=>1,"data"=>$array); }
참고: 인스턴스화할 때 네임스페이스를 추가해야 합니다.
사용하기 쉽습니다. 다음은 사용 코드입니다
<?php namespace PhpExcel\Controller; use Think\Controller; /** * Created by PhpStorm. * User: 飞 * Date: 2017/6/7 * Time: 11:26 */ class IndexController extends Controller { public function index() { $this->display(); } public function importExcel() { // 表单提交文件过来 // 获得文件路径 $file = $_FILES[excel][tmp_name]; if(!file_exists($file)){ echo '文件不存在'; exit; } // $fileMessage = explode('.',$_FILES[excel][name]); // $filename = $fileMessage[0]; // 获得文件扩展名 $filetype = $fileMessage[1]; //使用函数,获得excel数据 $re = importExecl($file,$filetype); $content = $re['data'][0]['Content']; // P助手函数,自己扩展 P($content);exit; /*逻辑代码*/ } }
그런 다음 페이지에 인쇄하세요. 다음과 같습니다
페이지에서 데이터 분석이 매우 잘됩니다
물론 데이터를 얻은 후 원하는 대로 하세요. . . 헤헤
---------------------------------- --- ---------------------------------- --- --
또 다른 시나리오는 Excel 테이블에 자신만의 데이터를 생성하는 것입니다
코드는 다음과 같습니다
public function outPortExcel() { // 引入文件 Vendor("PHPExcel.PHPExcel"); vendor('PHPExcel/PHPExcel/Writer/Excel2007.php'); $phpExcel = new \PHPExcel(); $phpExcel->getProperties()->setTitle("Office 2007 XLSX Test Document title"); $phpExcel->getProperties()->setSubject("Office 2007 XLSX Test Document subject"); //单独添加数据 $phpExcel->setActiveSheetIndex(0); $phpExcel->getActiveSheet()->setCellValue('A1', '姓名');//可以指定位置 $phpExcel->getActiveSheet()->setCellValue('B1', '年龄'); $phpExcel->getActiveSheet()->setCellValue('C1', '性别'); $phpExcel->getActiveSheet()->setCellValue('D1', '家庭'); //循环添加数据(根据自己的逻辑) for($i = 2;$i<200;$i++) { $phpExcel->getActiveSheet()->setCellValue('A' . $i, '张鹏飞'.$i); $phpExcel->getActiveSheet()->setCellValue('B' . $i, rand(25,28)); $phpExcel->getActiveSheet()->setCellValue('C' . $i, rand(0,1)); $phpExcel->getActiveSheet()->setCellValue('D' . $i, 'yes'); } $objWriter = new \PHPExcel_Writer_Excel2007($phpExcel); // 文件名 $filename = './a.xlsx'; // 存储文件 $objWriter->save($filename); // 下载文件 // 强制下载函数 代码请转至 http://blog.csdn.net/fei003/article/details/54614097 download('./a.xlsx'); }
좋아, 이것은 PHPExcel을 사용하는 과정입니다
위 내용은 PHPExcel 사용과정 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!