thinkphp5使用PHPExcel导出,导入Excel数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp5使用PHPExcel导出,导入Excel数据相关的知识,希望对你有一定的参考价值。
/** * 地址:https://github.com/phpOffice/PHPExcel 下载PHPExcel,下载后只需要Classes目录下的文件即可。 * 数据导出 * @param array $title 标题行名称 * @param array $data 导出数据 * @param string $fileName 文件名 * @param string $savePath 保存路径 * @param $type 是否下载 false--保存 true--下载 * @return string 返回文件全路径 */ function exportExcel($title=array(), $data=array(), $fileName=\'\',$sheet=\'\', $savePath=\'./\', $isDown=false){ Loader::import(\'phpexcel.PHPExcel\'); Loader::import(\'phpexcel.PHPExcel.IOFactory\'); $obj = new \\PHPExcel(); //横向单元格标识 $cellName = array(\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\', \'H\', \'I\', \'J\', \'K\', \'L\', \'M\', \'N\', \'O\', \'P\', \'Q\', \'R\', \'S\', \'T\', \'U\', \'V\', \'W\', \'X\', \'Y\', \'Z\', \'AA\', \'AB\', \'AC\', \'AD\', \'AE\', \'AF\', \'AG\', \'AH\', \'AI\', \'AJ\', \'AK\', \'AL\', \'AM\', \'AN\', \'AO\', \'AP\', \'AQ\', \'AR\', \'AS\', \'AT\', \'AU\', \'AV\', \'AW\', \'AX\', \'AY\', \'AZ\'); $obj->getActiveSheet(0)->setTitle($sheet); //设置sheet名称 $_row = 1; //设置纵向单元格标识 if($title){ $_cnt = count($title); // $obj->getActiveSheet(0)->mergeCells(\'A\'.$_row.\':\'.$cellName[$_cnt-1].$_row); //合并单元格 // $obj->setActiveSheetIndex(0)->setCellValue(\'A\'.$_row, \'数据导出:\'.date(\'Y-m-d H:i:s\')); //设置合并后的单元格内容 // $_row++; $i = 0; foreach($title AS $v){ //设置列标题 $obj->setActiveSheetIndex(0)->setCellValue($cellName[$i].$_row, $v); $i++; } $_row++; } //填写数据 if($data){ $i = 0; foreach($data AS $_v){ $j = 0; foreach($_v AS $_cell){ $obj->getActiveSheet(0)->setCellValue($cellName[$j] . ($i+$_row), $_cell); $j++; } $i++; } } //文件名处理 if(!$fileName){ $fileName = uniqid(time(),true); } $objWrite = \\PHPExcel_IOFactory::createWriter($obj, \'Excel2007\'); if($isDown){ //网页下载 header(\'pragma:public\'); header("Content-Disposition:attachment;filename=$fileName.xls"); $objWrite->save(\'php://output\');exit; } $_fileName = iconv("utf-8", "gb2312", $fileName); //转码 $_savePath = $savePath.$_fileName.\'.xlsx\'; $objWrite->save($_savePath); return $savePath.$fileName.\'.xlsx\'; }
/** * 地址:https://github.com/PHPOffice/PHPExcel * 数据导入 * @param string $file excel文件 * @param string $sheet */ function importExecl($file=\'\', $sheet=0){ $file = iconv("utf-8", "gb2312", $file); //转码 if(empty($file) OR !file_exists($file)) { die(\'file not exists!\'); } Loader::import(\'phpexcel.PHPExcel\'); $objRead = new \\PHPExcel_Reader_Excel2007(); //建立reader对象 if(!$objRead->canRead($file)){ $objRead = new \\PHPExcel_Reader_Excel5(); if(!$objRead->canRead($file)){ die(\'No Excel!\'); } } $cellName = array(\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\', \'H\', \'I\', \'J\', \'K\', \'L\', \'M\', \'N\', \'O\', \'P\', \'Q\', \'R\', \'S\', \'T\', \'U\', \'V\', \'W\', \'X\', \'Y\', \'Z\', \'AA\', \'AB\', \'AC\', \'AD\', \'AE\', \'AF\', \'AG\', \'AH\', \'AI\', \'AJ\', \'AK\', \'AL\', \'AM\', \'AN\', \'AO\', \'AP\', \'AQ\', \'AR\', \'AS\', \'AT\', \'AU\', \'AV\', \'AW\', \'AX\', \'AY\', \'AZ\'); $obj = $objRead->load($file); //建立excel对象 $currSheet = $obj->getSheet($sheet); //获取指定的sheet表 $columnH = $currSheet->getHighestColumn(); //取得最大的列号 $columnCnt = array_search($columnH, $cellName); $rowCnt = $currSheet->getHighestRow(); //获取总行数 $data = array(); for($_row=1; $_row<=$rowCnt; $_row++){ //读取内容 for($_column=0; $_column<=$columnCnt; $_column++){ $cellId = $cellName[$_column].$_row; $cellValue = $currSheet->getCell($cellId)->getValue(); //$cellValue = $currSheet->getCell($cellId)->getCalculatedValue(); #获取公式计算的值 if($cellValue instanceof PHPExcel_RichText){ //富文本转换字符串 $cellValue = $cellValue->__toString(); } $data[$_row][$cellName[$_column]] = $cellValue; } } return $data; }
<?php
//导入操作 $file = $_FILES; $file = iconv("utf-8", "gb2312", $file[\'info\'][\'name\']); //转码 //文件所在路径 $file = \'./\'.$file; if (empty($file) or !file_exists($file)) { die(\'file not exists!\'); } //引入类文件 include(\'PHPExcel.php\'); $objRead = new \\PHPExcel_Reader_Excel2007(); //建立reader对象 if (!$objRead->canRead($file)) { $objRead = new \\PHPExcel_Reader_Excel5(); if (!$objRead->canRead($file)) { die(\'No Excel!\'); } } $obj = $objRead->load($file); //建立excel对象 $currSheet = $obj->getSheet(0); //获取指定的sheet表 $cellName = array(\'A\', \'B\', \'C\', \'D\', \'E\', \'F\', \'G\', \'H\', \'I\', \'J\', \'K\', \'L\', \'M\', \'N\', \'O\', \'P\', \'Q\', \'R\', \'S\', \'T\', \'U\', \'V\', \'W\', \'X\', \'Y\', \'Z\', \'AA\', \'AB\', \'AC\', \'AD\', \'AE\', \'AF\', \'AG\', \'AH\', \'AI\', \'AJ\', \'AK\', \'AL\', \'AM\', \'AN\', \'AO\', \'AP\', \'AQ\', \'AR\', \'AS\', \'AT\', \'AU\', \'AV\', \'AW\', \'AX\', \'AY\', \'AZ\'); $columnH = $currSheet->getHighestColumn(); //取得最大的列号 $columnCnt = array_search($columnH, $cellName); //将字母列转换成数字列 $rowCnt = $currSheet->getHighestRow(); //获取总行数 $data = array(); for ($_row = 1; $_row <= $rowCnt; $_row++) { //读取内容 for ($_column = 0; $_column <= $columnCnt; $_column++) { $cellId = $cellName[$_column] . $_row; $cellValue = $currSheet->getCell($cellId)->getValue(); //$cellValue = $currSheet->getCell($cellId)->getCalculatedValue(); #获取公式计算的值 if ($cellValue instanceof PHPExcel_RichText) { //富文本转换字符串 $cellValue = $cellValue->__toString(); } $data[$_row][$cellName[$_column]] = $cellValue; } // //入库操作需要手动填写列 或者字段是动态的 或取得数据后再遍历 或者有更好的办法 // $data[\'sz_ph1\']=trim($currSheet->getCellByColumnAndRow(0, $_row)->getValue()); }
以上是关于thinkphp5使用PHPExcel导出,导入Excel数据的主要内容,如果未能解决你的问题,请参考以下文章