zoukankan      html  css  js  c++  java
  • phpexcel导入和导出excel文件代码

    PHPExcel代码地址:https://github.com/PHPOffice/PHPExcel

    导入和导出的代码:(其中vendor是thinkphp中的引入phpexcel包的用法,实际中可以根据具体的框架来)

    /**
     * 导入excel文件
     * @param  string $file excel文件路径
     * @return array        excel文件内容数组
     */
    function import_excel($file,$sheet = 0){
        // 判断文件是什么格式
        $type = pathinfo($file);
        $type = strtolower($type["extension"]);
        $map = array(
            'xlsx'=>'Excel2007',
            'xls' =>'Excel5',
            'csv' =>'CSV'
        );
    
        ini_set('max_execution_time', '0');
        Vendor('PHPExcel.PHPExcel');
        setlocale(LC_ALL, 'zh_CN');
        // 判断使用哪种格式
        $objReader = PHPExcel_IOFactory::createReader($map[$type]);
        $objPHPExcel = $objReader->load($file);
        $sheet = $objPHPExcel->getSheet($sheet);
        // 取得总行数
        $highestRow = $sheet->getHighestRow();
        // 取得总列数
        $highestColumn = $sheet->getHighestColumn();
        //循环读取excel文件,读取一条,插入一条
        $data=array();
        //从第一行开始读取数据
        for($j=1;$j<=$highestRow;$j++){
            //从A列读取数据
            for($k='A';$k<=$highestColumn;$k++) {
                $cell = $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
                if ($cell instanceof PHPExcel_RichText){//富文本转换字符串
                    $cell = $cell->__toString();
                }
                // 读取单元格
                $data[$j][] = $cell;
            }
        }
        return $data;
    }
    
    /**
     *
     * execl数据导出
     * @param string $title 模型名(如Member),用于导出生成文件名的前缀
     * @param array $cellName 表头及字段名
     * @param array $data 导出的表数据
     * 入参示例
     * $title="这个是测试的标题";
    $cellName=[
    0=>['id','id',0,12,'CENTER'],
    1=>['state','订单状态',0,12,'left'],
    2=>['type','订单类型',0,12,'LEFT'],
    3=>['price','支付额',0,12,'LEFT'],
    4=>['member','会员',0,12,'LEFT'],
    5=>['store','店铺',0,12,'LEFT'],
    6=>['order_name','订单名称',0,12,'LEFT'],
    7=>['num','商品数量',0,12,'LEFT'],
    8=>['data','日期',0,12,'LEFT'],
    ];
    $data=[
    0=>['id'=>1,'state'=>'代付款','type'=>'普通订单','price'=>'48.01','member'=>'王大','store'=>'北京','order_name'=>'娃哈哈','num'=>'1523','data'=>'2018-10-09']
    ];
     *
     * 特殊处理:合并单元格需要先对数据进行处理
     */
    function export_excel($title,$cellName,$data,$needHeader=1)
    {
        ini_set('max_execution_time', '0');
        //引入核心文件
        vendor("PHPExcel.PHPExcel");
        $objPHPExcel = new PHPExcel();
        //定义配置
        $topNumber = $needHeader == 1 ? 2 : 1;//表头有几行占用
        $xlsTitle = iconv('utf-8', 'gb2312', $title);//文件名称
        $fileName = $title.date('_Ymd_His');//文件名称
        $cellKey = array(
            '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'
        );
    
        //写在处理的前面(了解表格基本知识,已测试)
    //     $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);//所有单元格(行)默认高度
    //     $objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);//所有单元格(列)默认宽度
    //     $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30);//设置行高度
    //     $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30);//设置列宽度
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);//设置文字大小
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);//设置是否加粗
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);// 设置文字颜色
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置文字居左(HORIZONTAL_LEFT,默认值)中(HORIZONTAL_CENTER)右(HORIZONTAL_RIGHT)
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//设置填充颜色
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF7F24');//设置填充颜色
    
        if ($needHeader == 1){
            //处理表头标题
            $objPHPExcel->getActiveSheet()->mergeCells('A1:'.$cellKey[count($cellName)-1].'1');//合并单元格(如果要拆分单元格是需要先合并再拆分的,否则程序会报错)
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',$title);
            $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(16);
            $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        }
            //处理表头
        foreach ($cellName as $k=>$v)
        {
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellKey[$k].$topNumber, $v[1]);//设置表头数据
    //        $objPHPExcel->getActiveSheet()->freezePane($cellKey[$k].($topNumber+1));//冻结窗口
            $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getFont()->setBold(true);//设置是否加粗
            $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
            if($v[3] > 0)//大于0表示需要设置宽度
            {
                $objPHPExcel->getActiveSheet()->getColumnDimension($cellKey[$k])->setWidth($v[3]);//设置列宽度
            }
        }
        //处理数据
        foreach ($data as $k=>$v)
        {
            foreach ($cellName as $k1=>$v1)
            {
                $objPHPExcel->getActiveSheet()->setCellValue($cellKey[$k1].($k+1+$topNumber), $v[$v1[0]]);
                if($v['end'] > 0)
                {
                    if($v1[2] == 1)//这里表示合并单元格
                    {
                        $objPHPExcel->getActiveSheet()->mergeCells($cellKey[$k1].$v['start'].':'.$cellKey[$k1].$v['end']);
                        $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k1].$v['start'])->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
                    }
                }
                if($v1[4] != "" && in_array($v1[4], array("LEFT","CENTER","RIGHT")))
                {
                    $v1[4] = eval('return PHPExcel_Style_Alignment::HORIZONTAL_'.$v1[4].';');
                    //这里也可以直接传常量定义的值,即left,center,right;小写的strtolower
                    $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k1].($k+1+$topNumber))->getAlignment()->setHorizontal($v1[4]);
                }
            }
        }
        //导出execl
        header('pragma:public');
        header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xlsx"');
        header("Content-Disposition:attachment;filename=$fileName.xlsx");//attachment新窗口打印inline本窗口打印
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('php://output');
        exit;
    }
  • 相关阅读:
    谈谈php依赖注入和控制反转
    关于php 高并发解决的一点思路
    php常用的优化手段
    php判断多维数组的技巧
    浅谈echo、print、var_dump()、print_r()的区别
    MYSQL表记录字段换行符回车符处理
    mysqldumpslow的使用简介
    mysql性能优化配置总结
    关闭discuzX3.2注册页面的注册邮箱验证
    php变量布尔值验证
  • 原文地址:https://www.cnblogs.com/it100fen/p/13026910.html
Copyright © 2011-2022 走看看