菜单

ThinkPHP中用PHPExcel导出excel文件数量例子

2019年6月27日 - Java

本文实例陈说了ThinkPHP框架完毕导出excel数据的方法。分享给大家供大家参考,具体如下:

上边给出步骤:

在ThinkPHP框架下,导出excel数据的措施言传身教:

1.预备:自身制作八个变型的Excel参谋的沙盘文件,template.xls,小编的沙盘为

在操作前,应该在系统框架的扩张目录中增多OEscortG库,即要包罗ThinkPHP\Extend\Library\ORG\Util\PHPExcel.class.php文件及其相关接济文件。

图片 1

<?php
header("Content-type: text/html; charset=utf-8");
class MesTestAction extends Action {
  //测试导出excel数据
  public function tpGetExcel() {
    //创建对象
    import("ORG.Util.PHPExcel"); //从PHPExcel目录导PHPExcel.php类文件
    $excel = new PHPExcel();
    $data = M()->query('SELECT userid,username,stepgoal FROM tp_data_user LIMIT 2775');
    //Excel表格式,这里简略写了3列
    $letter = array('A','B','C');
    //表头数组
    $tableheader = array('userid','用户名','目标步数');
    $count= count($data);//总的数据行数
    $listNum = 500;//每个sheet页最大数据行数
    $num = ceil($count/$listNum);//sheet页个数
    $MuitData = array_chunk($data,$listNum,false);//分割总的数据,每页最多$listNum行有效数据
  //var_dump($MuitData);//die('as');
  //缺省情况下,PHPExcel会自动创建第一个SHEET,其索引SheetIndex=0
  //设置 当前处于活动状态的SHEET 为PHPExcel自动创建的第一个SHEET
  $excel->setActiveSheetIndex(0); //objPHPExcel
  //设置sheet的title
  $excel->getActiveSheet()->setTitle('考核得分第'.'1'.'页');
  //设置sheet的列名称
    for($k = 0; $k < count($tableheader); ++$k) {
      $excel->getActiveSheet()->setCellValue("$letter[$k]".'1',"$tableheader[$k]");//第一行数据
    }
  //填充表格信息 处理第1块数据
  $crrntSheetLineNo = count($MuitData[0]) + 1;
  for ( $j = 2; $j <= $crrntSheetLineNo; ++$j) { //遍历每一行
    $k = 0;
    foreach ( $MuitData[0][$j - 2] as $key => $value ) {//遍历具体行的某一列
      $excel->getActiveSheet()->setCellValue("$letter[$k]".$j,"$value");//第$k列 第$j行
      $k++;
    }
  }
  //后续的sheet页及数据块
    for ( $i = 1; $i <$num; ++$i) {
      //创建第$i个sheet
      $msgWorkSheet = new PHPExcel_Worksheet($excel, '考核得分第'.($i + 1).'页'); //创建一个工作表
      $excel->addSheet($msgWorkSheet); //插入工作表
      $excel->setActiveSheetIndex($i); //切换到新创建的工作表
      //设置sheet的列名称
      for($k = 0; $k < count($tableheader); ++$k) {
        $excel->getActiveSheet()->setCellValue("$letter[$k]1","$tableheader[$k]");//第一行数据
      }
      //填充表格信息 处理第$i块数据
    $crrntSheetLineNo = count($MuitData[$i]) + 1; //var_dump($crrntSheetLineNo);var_dump($MuitData[$i-1]);die('as');
      for ( $j = 2; $j <= $crrntSheetLineNo; ++$j) { //遍历每一行
        $k = 0;
        foreach ( $MuitData[$i-1][$j - 2] as $key => $value ) {//遍历具体行的某一列
          $excel->getActiveSheet()->setCellValue("$letter[$k]$j","$value");//第$k列 第$j行
          ++$k;
        }
      }
      usleep(100);
    }
    //创建Excel输出对象
    $filename = "大奖赛培训考核得分.xls";
    $write = new PHPExcel_Writer_Excel5($excel);
    ob_end_clean();//清除缓冲区,避免乱码
  /*
  //输出到本地
    $write->save( iconv('utf-8', 'gbk', $filename) );
  */
    //输出到浏览器
    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/download");
    header('Content-Type:application/octet-stream');
    $encoded_filename = urlencode($filename);
    $encoded_filename = str_replace("+", "%20", $encoded_filename);
    $ua = $_SERVER["HTTP_USER_AGENT"];
    if (preg_match("/MSIE/", $ua)) {
      header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
    } else if (preg_match("/Firefox/", $ua)) {
      header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
    } else {
      header('Content-Disposition: attachment; filename="' . $filename . '"');
    }
    header("Content-Transfer-Encoding:binary");
    $write->save('php://output');
  }
}
?>

在那一个模板里面,你想在哪些岗位呈现怎样式就安装哪些样式,到时候绝对应地方 查出来的数据就能够自动套用样式,比方说标题大小,背景颜色,用函数等,都会自行套用,就绝不在后台代码调控那么麻烦了,那个也是挑选取模板生成excel原因。

愈来愈多关于thinkPHP相关内容感兴趣的读者可查看本站专项论题:《ThinkPHP入门教程》、《thinkPHP模板操作手艺总计》、《ThinkPHP常用艺术总计》、《codeigniter入门教程》、《CI(CodeIgniter)框架进级教程》、《Zend
FrameWork框架入门教程
》及《PHP模板工夫总括》。

附:

企望本文所述对我们基于ThinkPHP框架的PHP程序设计具有援救。

1.某列用条件格式等高级一点的操作应该也是足以的,未有试。

您可能感兴趣的篇章:

2.我们要注意一点,笔者要出口的数额是从第4行初始填写的,但是最棒留出一行空的,举例说第5行,并不只为了查出来的多寡和总计总数分别好看,也是为着便利在模板里面安装函数,比如说上面包车型地铁D6,用了SUM(D4:D5)函数,我是想计算D这一列的数目,然则在D6函数不可能仅仅是=SUM(D4)吧,等转移数据的时候就抵达不了效果,查出来的多少正是总括D4这些了,所以记得留出一行

2.下载PHPExcel文件,网络一百度就出来了,下载下来解压后目录结构如下:(附属类小部件中也提供有下载,附件中的PHPExcel是透过自己的压缩,把多余的东西删除了的)

图片 2

布局目录的验证,

1.下载下来的文件夹有3个文件夹和3个txt的辨证文书档案(表明文书档案就背着了):

Classes文件夹:这些文件夹是PHPExcel的首要包,也正是说只要把那些文件夹拷贝到项目,援用就可以了。那个文件夹下边有PHPExcel.php文件和PHPExcel文件夹,引用的时候用PHPEx.php就足以了。

Documentation文件夹:表达文书档案,略过。

Tests文件夹:这一个文件夹尽管并非导入到项目,但是里面满满的都是例证啊,都是给大家用的。作者测验用的就是里面01simple-download-xls.php和30template.php那四个例子的代码结合在一起,分别是下载xls和加载模板的。

3.新建三个品种,导入ThinkPHP,配置好index.php,配置文件,在Public文件夹下边放我们的excel.模板文件。特别的,在ThinkPHP下边包车型地铁Extend文件夹下新建文件夹Vendor,把PHPExcel复制到其根目录下。因为ThinkPHP中用PHPExcel不可能透过

require 
‘./include/phpexcel/Classes/PHPExcel.php’;那样加载,只可以是用Vendor()加载第三方类库方式加进去。(这一个很首要,小编事先一贯不成功原因便是在那边)

图片 3

5.本身的品类目录如下:

图片 4图片 5

6.在IndexAction中的index()内写如下方法

 

 代码如下

class IndexAction extends Action {
  /**导出的excel表格 */
  function index() {
    //将供给导出到excel的数码查询出来
    $mdata = M ( ‘a’ );
    $data = $mdata->select
();
  
    //初叶生成excel内容
    /** 加载IOFactory包 */
    Vendor ( ‘Excel.Classes.PHPExcel’ );
//Vendor路线的写法参照他事他说加以考查ThinkPHP文书档案
  
    /** 错误音信 */
    error_reporting ( E_ALL );
  
    $objReader = PHPExcel_IOFactory::createReader ( ‘Excel5’ );
//在内部存款和储蓄器中国建工业总集结团三个excel二零零四操作
   
//加载供给读取的沙盘放在内部存款和储蓄器的excel中,路径一定要对啊,小编在index.php中用了define(ROOT,
dirname(__FILE__));所以上面那样写
    $objPHPExcel = $objReader->load ( ROOT .
“/Pulice/template/template.xls” );
  
    //设置excel格式
    //$objPHPExcel->getActiveSheet ()->setCellValue ( ‘B1’,
‘计算表’ );
//在B地点展现标题,能够动态拉长,这几个例子中本身是在母版中写死了的
    $objPHPExcel->getActiveSheet ()->setCellValue ( ‘E1’, date (
‘Y-m-d H:i:s’, time () ) ); //在E地点显得时间
  
    /**将数据用循环放进表格相对应地点S*/
    $baseRow = 5; //数据从5-1行开端往下输出,具体数目看你的模板了
  
    foreach ( $data as $r
=> $dataRow ) {
      $row = $baseRow + $r;
      $objPHPExcel->getActiveSheet ()->insertNewRowBefore ( $row,
1 ); //插入新的行
   
      //将数据填充到相对应的地方
      $objPHPExcel->getActiveSheet ()->setCellValue ( ‘A’ . $row,
$r + 1 ); //序号
      $objPHPExcel->getActiveSheet ()->setCellValue ( ‘B’ . $row,
$dataRow [‘codenum’] ); //编号
      $objPHPExcel->getActiveSheet ()->setCellValue ( ‘C’ . $row,
$dataRow [‘name’] ); //货色名称
      $objPHPExcel->getActiveSheet ()->setCellValue ( ‘D’ . $row,
$dataRow [‘price’] ); //单价
      $objPHPExcel->getActiveSheet ()->setCellValue ( ‘E’ . $row,
$dataRow [‘quantity’] ); //数量
    }
    $objPHPExcel->getActiveSheet ()->removeRow ( $baseRow – 1, 1
); //成效:把最顶上边包车型客车那一空白行去掉
   
//———上边的代码是从30template.php(加载模板)中copy下来本人改成本人想要————————————————
  
    // 
———-下边的代码是从01simple-download-xls.php(下载excel表格)中copy下来的——-
    //将收获的多寡导出到excel中提供给用户下载
  
    // 将出口重新定向到客户端浏览器的(Excel5)
    $filename = date ( ‘Y-m-d’, time () );
    header ( ‘Content-Type: application/vnd.ms-excel’ );
    header ( ‘Content-Disposition: attachment;filename=”‘ . $filename .
‘.xls”‘ ); //要下载的excel文件的文书名,那设置了用当下日子作为文件名
    header ( ‘Cache-Control: max-age=0’ );
  
    $objWriter = PHPExcel_IOFactory::createWriter ( $objPHPExcel,
‘Excel5’ ); //在内部存款和储蓄器中筹划二个excel二零零一文件
    $objWriter->save ( ‘php://output’ );
    exit ();
  }
}

7.在模板页调用地点的方式就能够了,比方<a
href=”{:U(‘Index/outexcel’)}”>导出excel</a>

自然啦,想依据条件来导出内容就看您怎么查数据库咯。

写最终:当然啦,笔者是做好了才截图上来的,所以还未有两全,还要管理一下难题滴,例如说乱码
啊(看您下载下来的有未有乱码咯)。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图