前天有一个兄弟问我能不能将数据库里的数据,批量,分表,设定每个表有多少条,这么将数据导出来,想了想。觉得是可以实现的,想了想简单的写了个代码,也遇到了困难,就是“设定每个表多少条”数据的时候出现了问题,最后折中的一个办法。
做了一个前端提交每个表多少条数据的,可以进行设定参数的。
实验数据5000条
前端代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <p>总共含有:{$num}条数据</p> <form action="{:U(‘Index/index‘)}" method="post"> <input type="text" name="num" placeholder="每表条数"> <input type="submit" > </form> <p></p> </body> </html>
后台代码
<?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { //添加数据 public function index(){ $count = D("User")->count(); if(IS_POST){ $num = I(‘post.num‘); $grade = $count/$num+1; for($i=1;$i<$grade;$i++){ $url = "http://127.0.0.1/index.php/Home/Index/demo?strat=".$i."&end=".$num; echo "<script>window.open(‘$url‘)</script>"; } echo "完成"; }else{ $this->assign("num",$count); $this->display(); } } //批量导出数据 public function demo(){ $strat = I(‘get.strat‘); $end = I(‘get.end‘); $ResultInfo = D(‘User‘)->page("$strat,$end")->select(); // 清空(擦除)缓冲区并关闭输出缓冲 ob_end_clean(); //引入PHPExcel库文件 import("Org.Util.PHPExcel"); //创建对象 $excel = new \PHPExcel(); $excel->getActiveSheet()->setTitle(‘投诉列表‘); // 设置单元格高度 // 所有单元格默认高度 $excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(25); // 第一行的默认高度 $excel->getActiveSheet()->getRowDimension(‘1‘)->setRowHeight(30); // 垂直居中 $excel->getActiveSheet()->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); // 设置水平居中 $excel->getActiveSheet()->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //Excel表格式 $letter = array(‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘F‘,‘G‘,‘H‘,‘I‘,‘Z‘,‘K‘); //设置表头 $tableheader = array(‘序号‘,‘插入时间‘,‘修改时间‘,‘数据状态‘,‘姓名‘,‘密码‘,‘手机号‘,‘性别‘,‘年龄‘,‘邮箱‘,‘地址‘); //设置表头表格宽度 $tablestyle = array( array(‘width‘=>‘5‘), //序号 array(‘width‘=>‘15‘), //插入时间 array(‘width‘=>‘15‘), //修改时间 array(‘width‘=>‘15‘), //数据状态 array(‘width‘=>‘30‘), //姓名 array(‘width‘=>‘10‘), //密码 array(‘width‘=>‘20‘), //密码 array(‘width‘=>‘20‘), //手机号 array(‘width‘=>‘10‘), //性别 array(‘width‘=>‘10‘), //年龄 array(‘width‘=>‘80‘), //邮箱 array(‘width‘=>‘10‘), //地址 ); //填充表头信息 for($i = 0;$i < count($tableheader);$i++) { $excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]"); $excel->getActiveSheet()->getColumnDimension($letter[$i])->setWidth($tablestyle[$i][‘width‘]); } //填充表格信息 for ($i = 2;$i <= count($ResultInfo) + 1;$i++) { $j = 0; foreach ($ResultInfo[$i - 2] as $key=>$value) { $excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value"); $j++; } } //将文件保存在服务器时,打开的浏览器窗口不能自动关闭 // $write = new \PHPExcel_Writer_Excel5($excel); // $filename = "./Public/excel/".date(‘Y-m-d‘,time())."-".$strat.".xls"; // $write->save($filename); //直接下载的代码 $write = new \PHPExcel_Writer_Excel5($excel); $write->save($filename); header("Pragma: public"); header("Expires: 0"); 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;charset=utf-8"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header(‘Content-Disposition:attachment;filename=‘.date(‘Y-m-d‘)."-".$strat.‘.xls‘); header("Content-Transfer-Encoding:binary"); $write->save(‘php://output‘); } }
不足之处,就是保存在本地的时候,下载完成的空白窗口不会自动关闭,这个暂时没有完美的解决。
关于thinkphp使用phpexcel批量导入和导出的,可以查看相关文章。