1. 下载PHPExcel

2. 找到vender核心文件   创建目录   vendor/phpoffice/phpexecel/

3. 引入类

方法一

<?php
require dirname(dirname(__FILE__)).'/vendor/phpoffice/phpexcel/Classes/PHPExcel.php';
>

方法二

( 1 )    修改文件vendor/composer/autoload_namespace.php,在return array();中增加一行:

'PHPExcel' => array($vendorDir . '/phpoffice/phpexcel/Classes'),

( 2 )     修改文件vendor/composer/autoload_static.php,找到 public static $prefixesPsr0 = array () 部分,在键名P的下面新增PHPExcel的内容:

public static $prefixesPsr0 = array ('P' => array ('Prophecy\\' => array (0 => __DIR__ . '/..' . '/phpspec/prophecy/src',),#   PHPExcel ->  SRART'PHPExcel' =>array (0 => __DIR__ . '/..' . '/phpoffice/phpexcel/Classes',),#   PHPExcel ->  END),);

4. 使用

<?php
namespace common\components\phpexcel;use Yii;class Phpexcel
{// 通过文件后缀,调用类const TYPE_EXCEL2007 = 'Excel2007';const TYPE_EXCEL5 = 'Excel5';const TYPE_EXCEL2003XML = 'Excel2003XML';const TYPE_CSV = 'CSV';/*** excel第一排字母名字** @var array*/public $menuKey = 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');public $questionTypeStr = '';/*** 获取 - 从文件获取数据转换成数组* @return array*/ public static function toData($filePath = null, $type = Phpexcel::TYPE_CSV, $arrAtrr = [], $arrSpecial = []){if (!file_exists($filePath)) {return [];}set_time_limit(0);ini_set('memory_limit','256M');$phpexcel     = new \PHPExcel;$excelReader  = \PHPExcel_IOFactory::createReader($type);$phpexcel     = $excelReader->load($filePath)->getSheet(0);//载入$total_line   = $phpexcel->getHighestRow(); $total_column = $phpexcel->getHighestColumn(); ++$total_column;$arrData = [];for ($row = 2; $row <= $total_line; $row++) {$data = [];for ($column = 'A'; $column !=$total_column; $column++) {// 给相应的数据赋值字段名称if (!empty($arrAtrr) && !isset($arrAtrr["{$column}"])) {continue;}$name = isset($arrAtrr["{$column}"]) ? $arrAtrr["{$column}"] : strtolower($column);$data[$name] = iconv('gb2312', 'utf-8', trim($phpexcel->getCell($column.$row) -> getValue()));}if (empty(array_filter($data))) {continue;}$arrData[] = $data;}return $arrData;}/*** 导出excel** @param array $excelData => array('menu', 'data'), menu为第一排菜单,data为excel下载数据* menu为一列名 例如 $menu = array('username'=>'用户名')   'username'对应data数据项的username* data为多维数据项 例如 $data = array( 0=>array('username'=>'admin'), 1=>array('username' =>'test')* @param string $fileName*/public function save($excelData, $fileName){set_time_limit(0);ini_set('memory_limit', '5120M');ob_end_clean();//使用PHPExcel导出Excel时,需要清空缓冲区,否则会导致乱码!if ($excelData['menu'] && $excelData['data']) {//创建一个excel$objPHPExcel = new \PHPExcel();//第一排为菜单$i = 0;foreach ($excelData['menu'] as $key => $menuName) {$menuKey = $this->menuKey[$i] . '1';$objPHPExcel->getActiveSheet()->setCellValue($menuKey, $menuName);$i++;}//从第二排开始处理$i = 2;foreach ($excelData['data'] as $key=>$val) {$j = 0;foreach ($excelData['menu'] as $key => $menuName) {$menuKey = $this->menuKey[$j] . $i;$menuVal = isset($val[$key]) ? $val[$key] : '';$objPHPExcel->getActiveSheet()->setCellValue($menuKey, $menuVal);$this->selectOption($objPHPExcel, $key);$j++;}$i++;}//保存excel—2007格式$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);//直接输出到浏览器if (strpos($_SERVER["HTTP_USER_AGENT"], "Firefox")) {//$fileName = iconv('utf-8', 'gb2312', $fileName);} else {if(ob_get_contents()) ob_end_clean();//ob_end_clean();//$fileName = urlencode($fileName);}header("Content- Type: application/vnd.ms-excel; charset=gb2312");header("Pragma: public");header("Expires: 0");header("Cache-Control:must-revalidate, post-check=0, pre-check=0");header("Content-Type:application/force-download");header("Content-Type:application/vnd.ms-execl");header("Content-Type:application/octet-stream");header("Content-Type:application/download");;header("Content-Disposition:attachment;filename=" . $fileName);header("Content-Transfer-Encoding:binary");$resout = $objWriter->save('php://output');exit;} else {throw new Exception('excelData must array =>array(menu, data)');}}/*** [selectOption 下拉菜单]* @Author   mgang* @DateTime 2019-10-19T17:35:45+0800* @param    [type]                   $model [description]* @param    [type]                   $k     [description]* @return   [type]                          [description]*/public function selectOption( $model, $k ){$info = '1-类型1,2-类型2,3-类型3,4-类型4';$model->setActiveSheetIndex(0);$objActSheet = $model->getActiveSheet();$objValidation = $objActSheet->getCell("B".($k+2))->getDataValidation(); //这一句为要设置数据有效性的单元格$objValidation -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST)-> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION)-> setAllowBlank(false)-> setShowInputMessage(true)-> setShowErrorMessage(true)-> setShowDropDown(true)-> setErrorTitle('输入的值有误')-> setError('您输入的值不在下拉框列表内.')-> setPromptTitle('问题类型')-> setFormula1('"' . $info . '"');}/*** [excelData 获取导入文件的数据]* @Author   mgang* @DateTime 2019-10-21T14:26:02+0800* @param    string                   $file  [description]* @param    integer                  $sheet [description]* @return   [type]                          [description]*/public function excelData($file='', $sheet=0){ $file = iconv("utf-8", "gb2312", $file);   //转码 if(empty($file) OR !file_exists($file)) exit(json_encode(array('code'=>0,'msg'=>'导入文件不存在')));$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; } }

YII2 中使用PHPExcel相关推荐

  1. 解决在Yii2中使用PHPExcel出现Class ‘app\controllers\PHPExcel‘ not found的问题

    解决在Yii2中使用PHPExcel出现Class 'app\controllers\PHPExcel' not found的问题 参考文章: (1)解决在Yii2中使用PHPExcel出现Class ...

  2. YII2中分页组件的使用

    当数据过多,无法一页显示时,我们经常会用到分页组件,YII2中已经帮我们封装好了分页组件. 首先我们创建操作数据表的AR模型: <?phpnamespace app\models;use yii ...

  3. 在yii2中,让你action参数支持POST数据的小方法

    2019独角兽企业重金招聘Python工程师标准>>> 我们先来看一段代码 class RaController extends Controller {public $enable ...

  4. Yii2中如何将Jquery放在head中的方法

    2019独角兽企业重金招聘Python工程师标准>>> 今天在写一个扩展,扩展中要求,扩展中可以任意地方输出jquery代码,那么jquery就必须在head中首先加载. 大家都知道 ...

  5. yii2 引入php文件,Yii2中YiiBase自动加载类、引用文件方法分析(autoload)

    本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. pub ...

  6. Yii2 中cookie的用法(2)

    设置Cookie PHPsetcookie("name", "Larry", time()+3600); Yii2$cookies = Yii::$app-&g ...

  7. Yii框架中使用PHPExcel导出Excel文件

    Yii框架中使用PHPExcel导出Excel文件http://www.cnblogs.com/wgx214/p/3709521.html 转载于:https://www.cnblogs.com/fl ...

  8. js生成的cookie在yii2中获取不到的解决办法

    在js中创建的cookie,默认用yii2中自带的方法Yii::$app->request->cookies->get('abc')获取不到,而用$_COOKIE['abc']又是能 ...

  9. yii2 html form,YII2中ajax通过post提交form表单数据报400错误的解决方法

    摘要:YII2中通过ajax post表单数据需要验证CSRF否则post数据是无法提交过去的.虽然有其他人提供过解决方案,但都不够完整,除了把enableCsrfValidation设为false外 ...

最新文章

  1. jquery倒计时插件可自定义多个倒计时间
  2. json的简单的数据格式
  3. 北京20-35万Sharepoint Senior Consultant
  4. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY5-神经网络
  5. 初识联邦学习(Federated learning)
  6. 网页排版规则:你需要知道的
  7. ElasticSearch-5.3.1集群环境搭建,安装ElasticSearch-head插件,安装错误解决
  8. 查看mysql补丁版本_Oracle 数据库 打补丁 Opatch 如何查找最新版本
  9. 游戏引擎架构 (Jason Gregory 著)
  10. Windows文件所有者恢复TrustedInstaller权限
  11. 广告公司测试软件题目,信息流广告测试题,看看你广告优化能力
  12. mysql 生成随机手机号和随机中文名
  13. 论文翻译:(BMVC 2022)You Only Need 90K Parameters to Adapt Light:a Light Weight Transformer
  14. python中的get用法
  15. Java 获取屏幕尺寸
  16. 大学物理复习--变化的电磁场
  17. php 快速导出百万级数据到 csv 或者 excel 文件
  18. 三分钟下载好mysql-8.0.16
  19. 【免费SEO工具分享】长尾关键字挖掘器:外贸拓词长尾关键词挖掘工具
  20. BND for mac安装和使用

热门文章

  1. 使用广播接收者获取短信及拦截电话
  2. 在cmd控制台输出汉字时出现乱码
  3. matlab错误使用meshline47,matlab里mesh出错Z 必须为矩阵,不能是标量或矢量怎么解决...
  4. 怎么样才能突破自我,从手工测试成为自动化测试人员
  5. JAVA Base64加密解密
  6. 泛微实物档案数字化管理方案,全面优化组织档案管理
  7. 一文带你了解 JavaScript 函数式编程
  8. I2S和I2C分别如何连接pad
  9. android 整点报时功能,手机整点报时软件|整点报时(半点报时)下载 v2.1 安卓版_最火软件站...
  10. 解决npm构建报错:An unhandled exception occurred: ENOTEMPTY: directory not empty