您的位置:首页 > 编程语言 > PHP开发

PHPExcel导入和导出的实现,导出数据过多失败,设置导出格式。

2018-03-28 10:22 856 查看
环境:thinkphp3.2,php5.6,mysql5.0,apache2.0。
导入原理:将phpExcel扩展类包移入项目,将excel表先下载,然后将其中的对应行列的数据添加到数据库中。
导出原理:查询数据库中的数据,导入到对应的excel表。
phpExcel包下载地址:https://download.csdn.net/download/qq_39545346/10312736
导入代码:

if (!empty($_FILES)) {
        //获取后缀

       $ext = strrchr($_FILES['file']['name'],'.');
        //上传配置

        $upload = new \Think\Upload();// 实例化上传类    
    $upload->maxSize   =     0 ;// 设置附件上传大小    
    $upload->exts      =     array('xls');//设置附件上传类型  
    $upload->autoSub = false; 
    $upload->rootPath  =   './data/subject/'; // 设置附件上传目录
        $upload->saveName = date("YmdHis",time()).rand(1000,9999); 
    //上传文件     
        $info   =   $upload->upload();   
    if(!$info) {
    // 上传错误提示错误信息        
    $this->error($upload->getError());    
    }     
         //导入相关类(本人用的TP3.2,相关类放在Org/Util)
        import("Org.Util.PHPExcel"); 
        import("Org.Util.PHPExcel.IOFactory"); 
            $file_name= $upload->rootPath.$info['import']['savename'];
            $objPHPExcel = new \PHPExcel();
    $objReader = \PHPExcel_IOFactory::createReader('Excel5');
            $objPHPExcel = $objReader->load($file_name,$encode='utf-8');
            $sheet = $objPHPExcel->getSheet(0);
            $highestRow = $sheet->getHighestRow(); // 取得总行数
            $highestColumn = $sheet->getHighestColumn(); // 取得总列数
            //循环添加数据
            for($i=3;$i<=$highestRow;$i++)
            {  
               $data['parent_id'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();  
               // $data['res_id']    = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
                $data['title'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
                $data['option_a'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
                $data['option_b']= $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
                $data['option_c']= $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
                $data['option_d']= $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
                $data['answer']= $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
                $data['type']= $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
                $data['better_explain']= $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();       
                $res[] = M('subject')->add($data);
            } 
            if($res){
            $this->success('导入成功!');
            }else{
            $this->error('导入失败!');
            }    
        }else
            {
                $this->error("请选择上传的文件");
            }  
导出函数:
function exportExcel($data, $savefile = null, $title = null, $sheetname = 'sheet1',$state=1) { 
    ini_set('memeory_limit','2048m');
    ob_end_clean();
    import("Org.Util.PHPExcel"); 
    if (is_null($savefile)) { 
        $savefile = time(); 
    } 
    if (is_array($title)) { 
        array_unshift($data, $title); 
    } 
    $objPHPExcel = new \PHPExcel(); 
    $head_num = count($data); 
    foreach ($data as $k => $v) { 
        $obj = $objPHPExcel->setActiveSheetIndex(0); 
        $row = $k + 2;
        $nn = 0; 
 
        foreach ($v as $vv) { 
            $col = chr(65 + $nn);
            $obj->setCellValue($col . $row, $vv);

            $nn++; 
    $objPHPExcel->getActiveSheet()->getStyle($col.$row)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        } 
    }
    if($state == 1){
        $objPHPExcel->getActiveSheet()->mergeCells('A1:I1');
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
    }
    if($state == 2){
        $objPHPExcel->getActiveSheet()->mergeCells('A1:C1');
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
    }
    $objPHPExcel->getActiveSheet()->setCellValue('A1',$savefile);
    //设置格式
    $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
    $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15); 
    $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15); 
    $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40); 
    $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15); 
    $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15); 
    $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(20);  
    $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(10);
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20); 
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);

    $maxColumn = count($data[0]);
    //此处循环解决多条数据导出失败
    for ($j = 0; $j < $maxColumn; $j++) {
        for ($i = 0; $i < $head_num - 1; $i++) { 
            $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setName("Candara");  
            $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setSize(12); 
            $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK); 
            $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
            $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); <
4000
br />            $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setBold(true);
        }
    }  
    $objPHPExcel->getActiveSheet()->setTitle($sheetname);  
    $objPHPExcel->setActiveSheetIndex(0); 
    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="' . $savefile . '.xls"'); 
    header('Cache-Control: max-age=0'); 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //Excel5 Excel2007 
    $objWriter->save('php://output'); 
}
//第一个参数是导出数据(二维数组),第二个参数是表名称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息