thinkphp フレームワークを使用しています
商品を配達した後、配達員がユーザーに通知テキスト メッセージを 1 つずつ送信する必要があるシナリオに遭遇しました。効率が低すぎるため、効率を下げるためにテンプレート テキスト メッセージを考えました。このように設計されており、彼は Excel をインポートし、phpExcel で解析し、名前、電話番号、注文番号、注文タイプ
を照合して、通知テキスト メッセージをユーザーに送信し、別の注文クエリ アドレスを送信しました。注文タイプに応じた通知情報
----------------------------------------------------- ---------------------------------------------------- --------- --------------------------------------
この記事は主に私の PHPExcel プロセスの使用方法を記録します
この記事は、偉大なマスターによる多くの投稿を読んでまとめたものであり、コードもコピーしましたが、具体的な原文は記録していませんので、投稿しません。少しずつです
この記事は自分の記録と勉強のためだけに書いています
----------------------------- ------------------- ------------------------------- ------------------- ------------------------------- -------------------
1: PHPExcelをダウンロードします
公式Webサイトからダウンロードできます 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'); }
OK、これは PHPExcel を使用するプロセスです
以上がPHPExcelの使用手順の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。