php/thinkphp使用PHPExcel解析表格数据,生成表格案例
来源:互联网 发布:mac打不开word文档 编辑:程序博客网 时间:2024/05/20 06:41
我使用的是thinkphp框架
遇到个一场景,发货员发货之后需要一个一个给用户发通知短信,效率太低,所以我就想到了模板短信,
降到效率问题,我是这样设计的,他把Excel导入,我通过phpExcel进行解析,匹配到姓名,电话,和订单号,订单类型
然后向用户发送通知短信,根据订单类型发送不同的订单查询地址和通知信息
------------------------------------------------------------------------------------------------------------------------------------------
这篇主要记录下我使用PHPExcel的过程
这篇不是远创,是看了好多大神的帖子后整理的,甚至说复制的代码,但是具体的原文我没有做记录,就不一点一点贴出来了
写此文仅供自己记录学习之用
----------------------------------------------------------------------------------------------------------------------------------------
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);}注意:实例化时命名空间要加\
使用的时候就简单了,下面是使用代码
<?phpnamespace 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');}
- php/thinkphp使用PHPExcel解析表格数据,生成表格案例
- Thinkphp使用PHPExcel导出Excel表格
- thinkphp使用PHPExcel导出excel表格
- PHPExcel表格生成
- phpexcel 生成表格
- tp5中使用phpexcel生成表格
- 【PHP】PHP使用PHPExcel生成Excel表格文件(附带随机生成英文名函数)
- ThinkPHP 3.2.3 使用 PHPExcel 处理 Excel 表格
- 使用easyUI数据表格生成子表格
- thinkphp自动生成表格
- [php] thinkphp使用csv导出excel表格
- PHP----从数据库导出数据到表格:PHPExcel
- 使用PHPExcel实现数据批量导出为excel表格
- php通过PHPExcel导出Excel表格
- PHP PHPExcel导入excel表格订单
- PhpExcel读取Excel表格中的数据
- thinkphp利用phpexcel导入到Excel表格中
- PHP生成EXCEL表格
- 用vs软件学习文件处理时遇到这个问题IntelliSense: incorrectly formed universal character name
- SQL 基于列的逻辑表达式 (CASE)
- 【Laravel】 常用的artisan命令【原创】
- git使用错误总结1
- LINQ(LINQ to Entities)
- php/thinkphp使用PHPExcel解析表格数据,生成表格案例
- jquery 中的trigge函数详解
- 实现微信公众号“一键关注”功能?
- 微信授权登录
- vxworks中断初始化以及挂接分析
- Smarty3 视频笔记
- Windows to Windows SSH登录
- git reset revert rebase 区别
- 银行业法律法规与综合能力-- 知识点总结