YII2 中使用PHPExcel
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相关推荐
- 解决在Yii2中使用PHPExcel出现Class ‘app\controllers\PHPExcel‘ not found的问题
解决在Yii2中使用PHPExcel出现Class 'app\controllers\PHPExcel' not found的问题 参考文章: (1)解决在Yii2中使用PHPExcel出现Class ...
- YII2中分页组件的使用
当数据过多,无法一页显示时,我们经常会用到分页组件,YII2中已经帮我们封装好了分页组件. 首先我们创建操作数据表的AR模型: <?phpnamespace app\models;use yii ...
- 在yii2中,让你action参数支持POST数据的小方法
2019独角兽企业重金招聘Python工程师标准>>> 我们先来看一段代码 class RaController extends Controller {public $enable ...
- Yii2中如何将Jquery放在head中的方法
2019独角兽企业重金招聘Python工程师标准>>> 今天在写一个扩展,扩展中要求,扩展中可以任意地方输出jquery代码,那么jquery就必须在head中首先加载. 大家都知道 ...
- yii2 引入php文件,Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. pub ...
- Yii2 中cookie的用法(2)
设置Cookie PHPsetcookie("name", "Larry", time()+3600); Yii2$cookies = Yii::$app-&g ...
- Yii框架中使用PHPExcel导出Excel文件
Yii框架中使用PHPExcel导出Excel文件http://www.cnblogs.com/wgx214/p/3709521.html 转载于:https://www.cnblogs.com/fl ...
- js生成的cookie在yii2中获取不到的解决办法
在js中创建的cookie,默认用yii2中自带的方法Yii::$app->request->cookies->get('abc')获取不到,而用$_COOKIE['abc']又是能 ...
- yii2 html form,YII2中ajax通过post提交form表单数据报400错误的解决方法
摘要:YII2中通过ajax post表单数据需要验证CSRF否则post数据是无法提交过去的.虽然有其他人提供过解决方案,但都不够完整,除了把enableCsrfValidation设为false外 ...
最新文章
- jquery倒计时插件可自定义多个倒计时间
- json的简单的数据格式
- 北京20-35万Sharepoint Senior Consultant
- 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY5-神经网络
- 初识联邦学习(Federated learning)
- 网页排版规则:你需要知道的
- ElasticSearch-5.3.1集群环境搭建,安装ElasticSearch-head插件,安装错误解决
- 查看mysql补丁版本_Oracle 数据库 打补丁 Opatch 如何查找最新版本
- 游戏引擎架构 (Jason Gregory 著)
- Windows文件所有者恢复TrustedInstaller权限
- 广告公司测试软件题目,信息流广告测试题,看看你广告优化能力
- mysql 生成随机手机号和随机中文名
- 论文翻译:(BMVC 2022)You Only Need 90K Parameters to Adapt Light:a Light Weight Transformer
- python中的get用法
- Java 获取屏幕尺寸
- 大学物理复习--变化的电磁场
- php 快速导出百万级数据到 csv 或者 excel 文件
- 三分钟下载好mysql-8.0.16
- 【免费SEO工具分享】长尾关键字挖掘器:外贸拓词长尾关键词挖掘工具
- BND for mac安装和使用
热门文章
- 使用广播接收者获取短信及拦截电话
- 在cmd控制台输出汉字时出现乱码
- matlab错误使用meshline47,matlab里mesh出错Z 必须为矩阵,不能是标量或矢量怎么解决...
- 怎么样才能突破自我,从手工测试成为自动化测试人员
- JAVA Base64加密解密
- 泛微实物档案数字化管理方案,全面优化组织档案管理
- 一文带你了解 JavaScript 函数式编程
- I2S和I2C分别如何连接pad
- android 整点报时功能,手机整点报时软件|整点报时(半点报时)下载 v2.1 安卓版_最火软件站...
- 解决npm构建报错:An unhandled exception occurred: ENOTEMPTY: directory not empty