Thinkphp excel批量导出-分表导出

Posted shenlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thinkphp excel批量导出-分表导出相关的知识,希望对你有一定的参考价值。

前天有一个兄弟问我能不能将数据库里的数据,批量,分表,设定每个表有多少条,这么将数据导出来,想了想。觉得是可以实现的,想了想简单的写了个代码,也遇到了困难,就是“设定每个表多少条”数据的时候出现了问题,最后折中的一个办法。

 

做了一个前端提交每个表多少条数据的,可以进行设定参数的。

 

实验数据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批量导入和导出的,可以查看相关文章。

 

以上是关于Thinkphp excel批量导出-分表导出的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP5.1导出excel表

ThinkPHP5.1导出excel表

Thinkphp 3.2.2 利用phpexcel完成excel导出功能

无限极分类+商品导出excel(Thinkphp5,数据读取无限极,个人限制导出5级)

thinkphp5 自己组装数据导出excel 文件

ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例