wangzhaobo

thinkPHP5.0框架

查询数据库调用Excel方法

public function exportlist(){
        $orderModel = new OrderModel();
        if($start_time = $this->request->param(\'start_time\',\'\')){
            $orderModel->where(function($query) use($start_time) {
                $query->where(\'created_at\',\'>=\',$start_time);
            });
        }
        if($end_time = $this->request->param(\'end_time\',\'\')){
            $orderModel->where(function($query) use($end_time) {
                $query->where(\'created_at\',\'<=\',$end_time);
            });
        }

        $expTitle = \'详细营销单\'.date(\'Y-m-d\');
//数据库的字段, \'名字\', \'宽度
$expCellName = [ [\'rec_code\',\'推荐人\',15], [\'pro_code\',\'产品\',15], [\'price\',\'金额\',8], [\'sell_code\',\'营销人\',15], [\'created_at\',\'日期\',20], ]; $expTableData = $orderModel->order(\'id\',\'desc\')->select()->toArray(); if($expTableData){ $this->exportListExcel($expTitle,$expCellName,$expTableData); } }

 

Excel导出方法

public function exportListExcel($expTitle,$expCellName,$expTableData){
        $xlsTitle = iconv(\'utf-8\', \'gb2312\', $expTitle);//文件名称
        $fileName = $xlsTitle;
        $cellNum = count($expCellName);
        $dataNum = count($expTableData);
        Loader::import(\'PHPExcel.Classes.PHPExcel\');
        Loader::import(\'PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory\');
        Loader::import(\'PHPExcel.Classes.PHPExcel.Reader.Excel5\');

        $objPHPExcel = new \PHPExcel();
        // 居中
        $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\'center\');
        $objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(\'center\');
        $cellName = 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(0)->mergeCells(\'A1:\'.$cellName[$cellNum-1].\'1\');//合并单元格
        // $objPHPExcel->setActiveSheetIndex(0)->setCellValue(\'A1\', $expTitle.\'  Export time:\'.date(\'Y-m-d H:i:s\'));
        for($i=0;$i<$cellNum;$i++){
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].\'1\', $expCellName[$i][1]);
            $objPHPExcel->getActiveSheet(0)->getColumnDimension($cellName[$i])->setWidth($expCellName[$i][2]);
        }
        // Miscellaneous glyphs, UTF-8
        for($i=0;$i<$dataNum;$i++){
            for($j=0;$j<$cellNum;$j++){
                $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+2), $expTableData[$i][$expCellName[$j][0]]);
            }
        }

        header(\'pragma:public\');
        header(\'Content-type:application/vnd.ms-excel;charset=utf-8;name="\'.$xlsTitle.\'.xls"\');
        header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, \'Excel5\');
        $objWriter->save(\'php://output\');
        exit;
    }

PHP导入Excel

public function excel(){
        if($this->request->isPost()){
            if (!empty($_FILES)) {
                if(!in_array(cmf_get_file_extension($_FILES[\'file\'][\'name\']),[\'xlsx\',\'xls\'])){
                    $this->error(\'请上传Excel格式的文件!\', \'\');
                }
                $uploader = new Upload();
                $uploader->setFileType(\'file\');
                $result = $uploader->upload();
                if ($result) {
                    Loader::import(\'PHPExcel.Classes.PHPExcel\');
                    Loader::import(\'PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory\');
                    Loader::import(\'PHPExcel.Classes.PHPExcel.Reader.Excel5\');

                    $filename = ROOT_PATH .\'public\'. $result[\'preview_url\'];  //文件路径
                    $extension = cmf_get_file_extension($result[\'name\']);    //文件扩展名
                    if ($extension == \'xlsx\') {
                        $objReader = \PHPExcel_IOFactory::createReader(\'Excel2007\');
                        $objPHPExcel = $objReader->load($filename, $encode = \'utf-8\');  //加载文件内容,编码utf-8
                    } else if ($extension == \'xls\') {
                        $objReader = \PHPExcel_IOFactory::createReader(\'Excel5\');
                        $objPHPExcel = $objReader->load($filename, $encode = \'utf-8\');  //加载文件内容,编码utf-8
                    } else {
                        $this->error(\'请上传Excel格式的文件!\', \'\');
                    }
                    //$excel_array = $objPHPExcel->getsheet(0)->toArray();   //转换为数组格式
                    $sheet =$objPHPExcel->getSheet(0);
                    $highestRow = $sheet->getHighestRow();//取得总行数
                    //$highestColumn =$sheet->getHighestColumn(); //取得总列数
                    for($i=2;$i<=$highestRow;$i++){
                        if($value = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue()){
                            if(!Db::name(\'sell\')->where(\'sell_code\',$value)->find()){
                                $data[] = [\'sell_code\'=>$value];
                            }
                        }
                    }

                    if (Db::name(\'sell\')->insertAll ($data)) {
                        $this->success(\'导入数据成功!\', url(\'AdminSell/index\'));
                    } else {
                        $this->error(\'导入数据失败!\', \'\');
                    }
                } else {
                    $this->error($uploader->getError(), \'\');
                }
            }
        }
    }

 

 

还有一种比较简单,快捷的方法, 不需要因为额外的文件或者composer, 就是直接输出excel文件.

只需要一个方法(适合菜鸟使用)

/**
 * Author  963087326@qq.com
 * 导出excel
 * @param  array $data 导出数据
 * @param  array $a    excel表头
 * @param  string $b   导出的文件名
 * @return file       
 */
function excel($data,$a,$b=null){
    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Content-type:application/vnd.ms-excel");  
    header("Content-Disposition:attachment;filename=".$b.".xls");
    header("Pragma: no-cache");
     header("Expires: 0");

    //$a=[\'第一列\',\'第二列\',\'第三列\'];
    foreach ($a as $k => $v) {
        $a[$k]=iconv("UTF-8", "GB2312//IGNORE",$v);
    }
    //输出表头
    echo implode(\' \',$a)."\n";
    foreach ($data as $key => $value) {
    $arr = array();
    foreach ($value as $kk => $vv) {
        if(empty($vv) || $vv==\'无\' ){
            $vv=\'--\';
        }
        $j=iconv("UTF-8", "GB2312//IGNORE",$vv);
        $arr[]= trim($j);
    }
    //输出数据
    echo implode(\'  \',$arr)."\n"; 
    }
    //$b=[1,2,3];
}

 

分类:

技术点:

相关文章: