在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右 首先我先介绍csv文件的导出的方法: 如果你单纯是在数据导出界面上通过用户点击生成csv或者excel按钮通过服务器往浏览器输出excel或者csv 如果数据量小的化可以使用这样的方法(这种方法无法使用ajax)网上百度一下一堆介绍 这里有较为详细的方法介绍 和源码 我这里介绍的是 当数据量比较大时比如生成excel或者csv文件可能需要 几分钟这时候我们需要在用户点击生成按钮后先生成一个loading框阻止用户随意乱点 将excel或者 csv文件先导出到 服务器端后然后通过ajax方法返回给浏览器一个下载地址用户点击下载地址后下载文件 1.导出csv的话非常简单 核心生成代码: //这里传入的$data为二维数组 //即为$data = ( array ,array,array) function create_csv($data,$filename='simple.xls') { ini_set('max_execution_time', '0'); //这里的CSV即你项目的根目录下新建一个CSV文件夹 $path = ('CSV/'.iconv('UTF-8','gb2312',$filename)); $fp = fopen($path, 'w'); foreach( $data as $k => $v) { foreach ($v as $key => &$value) { //将数据值进行在编码 避免中文乱码问题 $value = iconv('UTF-8','gb2312',$value); } fputcsv($fp, $v); } fclose($fp); $result = array( 'status' => 1, 'path' =>'CSV/'.$filename ); return $result; exit; } 后台调用代码: public function generate() {
//这里data需要处理为二维数据及最终为 $data = (array,array,array)这样 $data = array(); $excel_title =array( "_id" , "bo_subject", ); array_push($data,$excel_title); ...处理真实数据并将其push入$data中 $result = create_csv($data,$filename); $this->ajaxReturn($result); } 前台通过jquery进行post:建议先去学习一下layer这个弹出层组件特别不错传送门 代码: <button style=" float: right;" class="btn" >生成</button> $('#generate').click(function(event) { var url = $(this).attr('url'); //loading层 var index = layer.load(1); function download(content) { layer.open({ type: 1, content: content, skin: 'layui-layer-demo', //样式类名 closeBtn: 1, shift: 0, area: ['200px', '105px'], shadeClose: true, //开启遮罩关闭 content:content }); } $.post(url, function(data) { if (data.status) { layer.close(index); data.path = '__ROOT__' +'/'+(data.path); var test = '<a class="download" href =' + data.path + ' target="_blank" >点击下载</a>'; download(test); } else { layer.close(index); layer.alert('出现错误') } }, "json"); }); 2.导出excel:(导出excel特别慢 适用场景为更复杂的问题比如导出字体的颜色大小排版控制 并且导出图片之类) 首先我们需要引入phpexcel这个插件下载完后去掉没必要的放在 /ThinkPHP/Library/Vendor/PHPExcel 注意目录结构为如图
核心函数为: function create_xls($data,$filename='simple.xls') { ini_set('max_execution_time', '0'); Vendor('PHPExcel.PHPExcel'); $phpexcel = new PHPExcel(); $phpexcel->getProperties() ->setCreator("HYZ") ->setLastModifiedBy("HYZ") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); $phpexcel->getActiveSheet()->fromArray($data); $phpexcel->getActiveSheet()->setTitle('Sheet1'); $phpexcel->setActiveSheetIndex(0); function saveExcelToLocalFile($objWriter,$filename) { // make sure you have permission to write to directory $filePath = 'Excel/'.$filename; $objWriter->save($filePath); return $filePath; } // 导出到本地语法 $objWriter = new PHPExcel_Writer_Excel5($phpexcel); // 导出到界面语法 // $objwriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5'); saveExcelToLocalFile($objWriter,iconv('utf-8','gb2312',$filename)); $response = array( 'result' => 1, 'url' =>'Excel/'.$filename ); return json_encode($response); exit; } 其他的部分基本可以参考生成csv的一样
|
2022-08-15
2022-08-17
2022-11-06
2022-08-18
2022-07-18
请发表评论