九月丶

利用phpExcel导出Excel表格数据(封装Excel类,简单,通用)
在工作中很多地方需要用到Excel导出数据,所以我用TP5封装了一个Excel通用的导出类,调用起来非常方便。并且...
扫描右侧二维码阅读全文
05
2018/01

利用phpExcel导出Excel表格数据(封装Excel类,简单,通用)

在工作中很多地方需要用到Excel导出数据,所以我用TP5封装了一个Excel通用的导出类,调用起来非常方便。并且解决了超出26个字母字段无法导出的问题。

<?php

namespace app\common\controller;

use think\Controller;

/**
 * PHPExcel操作类
 * @package app\common\controller
 */
class Excel extends Controller
{
    /**
     * 导出Excel表格
     * @param  string $fileName  文件名
     * @param  array  $headArr   标题头信息
     * @param  array  $data      内容体
     * @return file
     */
    public function out($fileName = '',$headArr,$data)
    {
        //对数据进行检验
        if(empty($data) || !is_array($data)){
            die("没有需要导出的数据");
        }

        $date = date("Y_m_d",time());
        $fileName .= "_{$date}.xls";

        //创建PHPExcel对象,注意,不能少了\
        $objPHPExcel = new \PHPExcel();

        $hColCount = 0;
        //设置表头//支持26列以上
        $hkey = ord("A");//A--65
        $hkey2 = ord("@");//@--64
        foreach($headArr as $v){
            if($hkey>ord("Z")){
                $hkey2 += 1;
                $hkey = ord("A");
                $hcolum = chr($hkey2).chr($hkey);//超过26个字母时才会启用
            }else{
                if($hkey2>=ord("A")){
                    $hcolum = chr($hkey2).chr($hkey);//超过26个字母时才会启用
                }else{
                    $hcolum = chr($hkey);
                }
            }
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($hcolum.'1', $v);
            $objPHPExcel -> getActiveSheet() -> getColumnDimension() -> setAutoSize(true);

            $hColCount +=1;
            $hkey += 1;
        }

        $column = 2;
        $objActSheet = $objPHPExcel->getActiveSheet();


        foreach($data as $k => $rows){
            $key = ord("A");//A--65
            $key2 = ord("@");//@--64
            $colCount = 0;
            foreach($rows as $keyName=>$value){// 列写入
                if($key>ord("Z")){
                    $key2 += 1;
                    $key = ord("A");
                    $colum = chr($key2).chr($key);//超过26个字母时才会启用
                }else{
                    if($key2>=ord("A")){
                        $colum = chr($key2).chr($key);//超过26个字母时才会启用
                    }else{
                        $colum = chr($key);
                    }
                }
                if($colCount > $hColCount){
                    break;
                }else{
                    $objActSheet->setCellValue($colum.$column, $value.' ');
                }
                $key += 1;
            }
            $column++;
        }

        $fileName = iconv("utf-8", "gb2312", $fileName);
        //重命名表
        //设置活动单指数到第一个表,所以Excel打开这是第一个表
        $objPHPExcel->setActiveSheetIndex(0);
        header("Content-type: text/csv");
        header("Content-Disposition: attachment;filename=\"$fileName\"");
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output'); //文件通过浏览器下载
        $this->success('导出成功',url('index'));
        exit;
    }


}

调用方式

//第一个参数是文件名,第二个参数是标题,第三个参数是导出的数据
$excel->out('保函申请记录', $headArr, $excelData);
最后修改:2018 年 01 月 06 日 12 : 55 PM
如果觉得我的文章对你有用,请随意赞赏

1 条评论

  1. 老黑

    我操,上个星期因为这个功能折腾半天,早点看到就安逸了~(╯°A°)╯︵○○○

发表评论