phpExcel导入 导出类封装(支持合并单元格)

class ExcelIndex

{

private $excel= null;

    private $cellArr= [];

    function __construct()

    {

        // require __DIR__ . "./Classes/PHPExcel.php";  引入phpexcel  如果用了命名空间就不需要单独引入

        $this->excel= new \PHPExcel();  

        $this->cellArr= ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];

    }

/**

* @param $data  array      (必须)数据(二维数组)【只能存在要导出的数据】

* @param $title  array    (必须)列标中文 ['标题1', '标题1', '标题1', '标题1', '标题1', '标题1']

* @param $filename string    (必须)文件名称

* @param $cellNames array  (必须)列标英文 ['A', 'B', 'C', 'D', 'E', 'F']

* @param $arr_hb    array  (可选)是否合并单元格 参数:['A' => 'order_sn', 'B' => 'order_sn']

* @throws \PHPExcel_Exception

*/

    public function Export($data, $title, $filename, $cellNames, $arr_hb=[])

    {

        $cellName= [];

        foreach ($cellNames as $key=> $val) {

            foreach ($this->cellArras $k=> $v) {

                $cellName[]= $val. $v;

            }

    }

$cellName= array_merge($this->cellArr, $cellName);

        /* 设置宽度 */

        //        $this->excel->getActiveSheet()->getColumnDimension()->setAutoSize(true);

        $this->excel->getActiveSheet(0)->mergeCells('A1:AC1');              //合并单元格

        $this->excel->getactivesheet()->setCellValue('A1', $filename); //设置标题

        //设置SHEET

        $this->excel->setactivesheetindex(0);

        $this->excel->getActiveSheet()->setTitle('sheet1');

        $_row= 2;  //设置纵向单元格标识

        foreach ($title as $k=> $v) {

            $this->excel->getactivesheet()->setCellValue($cellName[$k]. $_row, $v);

        }

        $i= 1;

        foreach ($data AS $_v) {

            $j= 0;

            foreach ($_vAS $_cell) {

                if ($cellName[$j]== 'A' || $cellName[$j]== 'F' || $cellName[$j]== 'L') {//科学转换

                    $this->excel->getActiveSheet()->setCellValue($cellName[$j]. ($i+ $_row), "\t" . $_cell. "\t");

                }else {

                    $this->excel->getActiveSheet()->setCellValue($cellName[$j]. ($i+ $_row), $_cell);

                }

            $j++;

            }

        $i++;

        }

        //是否合并单元格

        if (!empty($arr_hb)&& !empty($arr)) {

                foreach ($arr_hb as $k1=> $v1) {

                    $lert= $this->_remerge($arr, $k1, $v1);

                    foreach ($lertas $aa) {

                        $this->excel->getActiveSheet()->mergeCells($aa);

                    }

                }

        }

        //输出到浏览器

        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/octet-stream");

        header("Content-Type:application/download");

        header('Content-Disposition:attachment;filename="' . $filename . '.xlsx"');

        header("Content-Transfer-Encoding:binary");

        $objWriter= \PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');

        $objWriter->save('php://output');

    }

 /**

* @param string $filename  要导入的文件

* @param int $start_get    从那一行开始读取

* @param array $hang_tit  头部

* @return array|string

* @throws \PHPExcel_Exception

* @throws \PHPExcel_Reader_Exception

*/

    public function Import($file,$start_get=3,$hang_tit=[])

    {

        if (!file_exists($file)) {

            return '文件不存在';

        }

        $objPHPExcel= \PHPExcel_IOFactory::load($file); //自动文件类型 无需自定义

        $sheet= $objPHPExcel->getSheet(0);

        $highestRow= $sheet->getHighestRow(); // 取得总行数

        $index= 0;

        $hang_tit = empty($hang_tit)?['A'=>'name','B'=>'title','C'=>'phone','D'=>'sex']:$hang_tit;

        $list= [];

        for($start_get;$start_get<=$highestRow;$start_get++)

        {

            foreach ($hang_tit as $k=>$v){

                $list[$index][$v]= trim($objPHPExcel->getActiveSheet()->getCell($k.$start_get)->getValue());//获取A列的值

            }

            $index++;

        }

        return $list;

    }

private function _remerge($arr, $let, $field)

{

        $letr= [];$year= $arr[0][$field];$s= 3;$e= 2;

        foreach ($arr as $k=> $v) {

                if ($v[$field]!= $year) {$letr[]= "$let" . $s. ":$let" . $e. "";$e++;

                    $year= $v[$field];$s= $e;

                }else {

                    $e++;if (count($arr)== ($k+ 1)) {$letr[]= "$let" . $s. ":$let" . $e. "";}

                }

       }

        return $letr;

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268