yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法,yii226列
yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法,yii226列
作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
先概括下我们接下来要说的大致内容:
数据列表页面导出excel数据,
1、可以根据GridView的filter进行搜索数据并导出
2、可以自行扩展数据导出的时间直接导出数据
//先来看controller层,接收GridView参数并做拼接处理
php controller
//传参导出<br />$paramsExcel = ''; //这个参数是控制接收view层GridView::widget filter的参数<br />if ( ($params = Yii::$app->request->queryParams) )<br />{<br /> if ($params && isset($params['xxSearch']) && $params['xxSearch'])<br /> {<br /> foreach ($params['xxSearch'] as $k => $v) <br /> {<br /> if ($v)<br /> {<br /> $paramsExcel .= $k.'='.$v.'&';<br /> }<br /> }<br /><br /> }<br /> $paramsExcel = rtrim($paramsExcel, '&');<br />}
//看view层我们需要做什么
php 输入页面上的html按钮
<div style="margin-bottom: 30px;"><br /> <?= Html::a('导出', 'javascript:ed();', ['class' => 'btn btn-success']) ?><br /> 开始时间:<input type="text" name="start_time" /><br /> 结束时间:<input type="text" name="end_time" /><br /></div>
上面javascript:ed()方法如下,注意这里我们拼接了controller层传递过来的参数,并自行扩展了时间进行搜索数据
//数据导出<br />function ed ()<br />{<br /> var paramsExcel = "<?php echo $paramsExcel; //controller传递过来的参数?>", <br /> url = '/xx/export-data', //此处xx是控制器<br /> startTime = $.trim($('input[name=start_time]').val()), <br /> endTime = $.trim($('input[name=end_time]').val()),<br /> temp = '';<br /> <br /> //需要把view层GridView::widget filter的参数与我们自行扩展的参数拼接融合<br /> if (paramsExcel)<br /> {<br /> temp += '?'+paramsExcel;<br /> if (startTime)<br /> temp += '&start_time='+startTime;<br /> <br /> if (endTime)<br /> temp += '&end_time='+endTime;<br /> } <br /> else if (startTime)<br /> {<br /> temp += '?start_time='+startTime;<br /> if (endTime)<br /> temp += '&end_time='+endTime;<br /> }<br /> else if (endTime)<br /> {<br /> temp += '?end_time='+endTime;<br /> }<br /> url += temp;<br /> window.location.href=url; //url是我们导出数据的地址,上面的处理都只是进行参数的处理<br />}
//下面我们来看下导出数据的action,暂且命名为controller层的 actionExportData,其中CommonFunc是我们引入的全局性质的公共方法
use common\components\CommonFunc;<br /> /**<br /> * @DESC 数据导出<br /> */<br /> public function actionExportData ()<br /> {<br /> $where = '1';<br /> $temp = '';<br /> if ($_GET)<br /> {<br /> foreach ($_GET as $k => $v)<br /> {<br /> if ($k == 'start_time')<br /> {<br /> $t = date('Y-m-d', strtotime($v)).' 00:00:00';<br /> $temp .= 'create_time >= \''. $t . '\' AND ';<br /> }<br /> elseif ($k == 'end_time')<br /> {<br /> $t = date('Y-m-d', strtotime($v)).' 23:59:59';<br /> $temp .= 'create_time <= \''. $t . '\' AND ';<br /> }<br /> else<br /> {<br /> $temp .= $k . '=\'' . $v . '\' AND ';<br /> }<br /> }<br /> $temp = rtrim($temp, ' AND');<br /> }<br /><br /> if ($temp) $where .= ' AND '.$temp;<br /> <br /> //查询数据<br /> $data = ......<br /><br /> if ($data)<br /> {<br /> //数据处理<br /> }<br /> <br /> $header = ['id', '用户账号', '创建时间']; //导出excel的表头<br /><br /> CommonFunc::exportData($data, $header, '表头', '文件名称');<br /> }
上面CommonFunc::expertData方法是我们底层扩展php-excel类封装的公共方法,这里才是我们要说的关键,关于 PHPExcel类文件大家可自行下载
No1. 我们走了一个小的弯,分享给大家看看
CommonFunc::expertData方法如下:
/**<br /> * @DESC 数据导出 <br /> * @notice max column is z OR 26,overiload will be ignored<br /> * @notice 缺点:导出数据的列数大于26时报错<br /> * @example <br /> * $data = [1, '小明', '25'];<br /> * $header = ['id', '姓名', '年龄'];<br /> * Myhelpers::exportData($data, $header);<br /> * @return void, Browser direct output<br /> */<br /> public static function exportData ($data, $header, $title = 'simple', $filename = 'data')<br /> {<br /> //require relation class files<br /> require(Yii::getAlias('@common').'/components/phpexcel/PHPExcel.php');<br /> require(Yii::getAlias('@common').'/components/phpexcel/PHPExcel/Writer/Excel2007.php');<br /> <br /> if (!is_array ($data) || !is_array ($header)) return false;<br /><br /> //列数<br /> $captions = ['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'];<br /><br /> $objPHPExcel = new \PHPExcel();<br /><br /> // Set properties<br /> $objPHPExcel->getProperties()->setCreator("Maarten Balliauw");<br /> $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");<br /> $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");<br /> $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");<br /> $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");<br /><br /> // Add some data<br /> $objPHPExcel->setActiveSheetIndex(0);<br /><br /> //添加头部<br /> $cheader = count($header);<br /> for ($ci = 1; $ci <= $cheader; $ci++) <br /> {<br /> if ($ci > 25) break; <br /> $objPHPExcel->getActiveSheet()->SetCellValue($captions[$ci-1].'1', $header[$ci-1]);<br /> }<br /><br /> //添加数据<br /> $i = 2;<br /> $count = count($data);<br /><br /> foreach ($data as $v)<br /> {<br /> $j = 0;<br /> foreach ($v as $_k => $_v)<br /> {<br /> $objPHPExcel->getActiveSheet()->SetCellValue($captions[$j].$i, $_v);<br /> $j++;<br /> }<br /> if ($i <= $count)<br /> {<br /> $i ++;<br /> }<br /> }<br /><br /> // Rename sheet<br /> $objPHPExcel->getActiveSheet()->setTitle($title);<br /><br /> // Save Excel 2007 file<br /> $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);<br /><br /> header('Pragma:public');<br /> header("Content-Type:application/x-msexecl;name=\"{$filename}.xls\"");<br /> header("Content-Disposition:inline;filename=\"{$filename}.xls\"");<br /><br /> $objWriter->save('php://output');<br /> <br /> }
下面是最终的解决方案,也是非常实用的数据导出方案
/**<br /> * @DESC 数据导<br /> * @notice 解决了上面导出列数过多的问题<br /> * @example <br /> * $data = [1, '小明', '25'];<br /> * $header = ['id', '姓名', '年龄'];<br /> * Myhelpers::exportData($data, $header);<br /> * @return void, Browser direct output<br /> */<br /> public static function exportData ($data, $header, $title = 'simple', $filename = 'data')<br /> {<br /> //require relation class files<br /> require(Yii::getAlias('@common').'/components/phpexcel/PHPExcel.php');<br /> require(Yii::getAlias('@common').'/components/phpexcel/PHPExcel/Writer/Excel2007.php');<br /> <br /> if (!is_array ($data) || !is_array ($header)) return false;<br /><br /> $objPHPExcel = new \PHPExcel();<br /><br /> // Set properties<br /> $objPHPExcel->getProperties()->setCreator("Maarten Balliauw");<br /> $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");<br /> $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");<br /> $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");<br /> $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");<br /><br /> // Add some data<br /> $objPHPExcel->setActiveSheetIndex(0);<br /><br /> //添加头部<br /> $hk = 0;<br /> foreach ($header as $k => $v)<br /> {<br /> $colum = \PHPExcel_Cell::stringFromColumnIndex($hk);<br /> $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);<br /> $hk += 1;<br /> }<br /><br /> $column = 2;<br /> $objActSheet = $objPHPExcel->getActiveSheet();<br /> foreach($data as $key => $rows) //行写入<br /> {<br /> $span = 0;<br /> foreach($rows as $keyName => $value) // 列写入<br /> {<br /> $j = \PHPExcel_Cell::stringFromColumnIndex($span);<br /> $objActSheet->setCellValue($j.$column, $value);<br /> $span++;<br /> }<br /> $column++;<br /> }<br /><br /> // Rename sheet<br /> $objPHPExcel->getActiveSheet()->setTitle($title);<br /><br /> // Save Excel 2007 file<br /> $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);<br /><br /> header('Pragma:public');<br /> header("Content-Type:application/x-msexecl;name=\"{$filename}.xls\"");<br /> header("Content-Disposition:inline;filename=\"{$filename}.xls\"");<br /><br /> $objWriter->save('php://output');<br /> <br /> }

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

完整指南:如何使用PHP擴充PHPExcel處理Excel檔案引言:在處理大量資料和統計分析時,Excel檔案經常被用作資料儲存和交換的一種常見格式。使用PHP擴充PHPExcel,我們可以輕鬆地讀取、寫入和修改Excel文件,從而有效地處理Excel資料。本文將介紹如何使用PHP擴充PHPExcel來處理Excel文件,並提供程式碼範例。一、安裝PHPExc

隨著數位化時代的到來,資料已經成為了我們日常生活和工作中最重要的一部分,而Excel檔案則成為資料處理的重要工具之一。相信許多PHP開發者也會在工作中常遇到使用Excel檔案進行資料處理與操作的情況。本文將為大家介紹使用PHPExcel函式庫來處理Excel檔案的方法和注意事項。什麼是PHPExcel? PHPExcel是一個PHP類

PHPEXCEL是優秀的PHP讀寫Excel檔案的類別庫,它提供了非常充分的API,能夠讓我們使用PHP來讀寫Excel檔案。而有些時候,我們需要將Excel文件轉換成CSV文件,在一些場合下使用。那麼,本文主要講述如何使用PHPEXCEL類別庫將Excel文件轉換成CSV文件,並進行開啟。

PHPExcel是一種處理微軟 Excel 檔案的開源 PHP 函式庫,可以讀取、建立、修改和儲存 Excel 檔案。它是一個強大且高度可自訂的工具,可用於處理資料分析、報告產生、資料匯入和匯出等任務。在本文中,將介紹PHPExcel為什麼成為PHP開發者關注的物件。

PHPExcel是開源的PHP函式庫,用來處理MicrosoftExcel(.xls和.xlsx)檔案。它可以讀取、寫入和操作Excel文件,提供了豐富的函數和方法。在PHP專案中使用PHPExcel函式庫,可以快速方便地處理Excel文件,實現資料的匯入、匯出和資料處理等功能。本文將介紹如何使用PHPExcel處理Excel檔案。一、安裝PHPExcel要使

在現今資訊快速傳遞的時代,資料的處理和儲存變得越來越重要。而Excel表格的使用是許多人的首選,這是因為Excel表格可以整合各種資料並且可以輕鬆地進行分析和處理。為了更有效率地完成Excel表格的創建,我們可以使用PHP和PHPExcel這兩個強大的工具。在本篇文章中,我們將介紹如何使用PHP和PHPExcel建立Excel檔案。 1.安裝PHPExcel首

PHP開發技巧:如何使用PHPExcel和PHPExcel_IOFactory操作MySQL資料庫概述:在Web開發中,處理Excel檔案是一個常見且重要的任務。 PHPExcel是一個功能強大且易於使用的PHP函式庫,它可以幫助我們讀取和寫入Excel檔案。本文將介紹如何使用PHPExcel和PHPExcel_IOFactory函式庫來操作MySQL資料庫。步驟1

PHP開發技巧:如何使用PHPExcel操作MySQL資料庫隨著網路的蓬勃發展,大量的資料儲存於資料庫中,並且需要進行匯入、匯出、處理等操作。在PHP開發中,PHPExcel是一個強大的函式庫,可以簡化與Excel檔案的交互,實現資料的匯入與匯出。本文將介紹如何使用PHPExcel來操作MySQL資料庫,實現資料的匯入和匯出功能。 PHPExcel的安裝與配置
