excel导入数据库 ,数据库导入excel

paginate(10);

//        分配数据

//        跳转页面
        return $this->fetch('index',compact('list'));
    }
    //    导入
    public function import(){
          //  符合类型
                $file = request()->file('image');


                // 移动到框架应用根目录/public/uploads/ 目录下
                if($file){
                    $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
                    if($info){
                        // 成功上传后 获取上传信息
                        // 输出 jpg
//                        echo $info->getExtension();
                        // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
//                        echo $info->getSaveName();
                        // 输出 42a79759f284b767dfcb2a0197904287.jpg

                if(!$info) {    // 上传错误提示错误信息
                    $this->error($info->getError());
                    die();
                }else{  // 上传成功

                    //  读取文件
                    $filename=ROOT_PATH . 'public' . DS . 'uploads'. DS  .$info->getSaveName();
//                    var_dump($filename);
//                    die();
                    Vendor('PHPExcel.Classes.PHPExcel');
                    Vendor('PHPExcel.PHPExcel.Classes.IOFactory');
                    $reader = \PHPExcel_IOFactory::createReader('Excel2007'); //设置以Excel5格式(Excel97-2003工作簿)

                    $PHPExcel = $reader->load($filename, $encode = 'utf-8'); // 载入excel文件
                   $num = $PHPExcel->getSheetCount();
                   $names = $PHPExcel->getSheetNames();


                   for($a=0;$a<$num;$a++){


                    $sheet = $PHPExcel->getSheet($a); // 读取第一個工作表

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

                    $highestColumm = $sheet->getHighestColumn(); // 取得总列数

                    ++$highestColumm;

                    $data = array();
                    $k=1;
                    for ($row = 2; $row <= $highestRow; $row++){//行数是以第1行开始

                        for ($currentColumn = 'B'; $currentColumn !=$highestColumm; $currentColumn++) {
                            //数据坐标
                             $address = $currentColumn.$row;

                            //读取到的数据,保存到数组$arr中
                            $count = $sheet->getCell($address)->getValue();

                            $name = $sheet->getCell($currentColumn.'1')->getValue();
                            $name = $this->trimall($name);
                            if(!empty($count) && !empty($name)){
                                ++$k;
                            $data['count'] = $count;
                            $data['name'] = $name ;

                            $data['time'] = strtotime(date("Y-m-".$sheet->getCell('A'.$row)->getValue()));
                            $data['username'] = $names[$a];
                              $worldName = explode('-',$name);
                              if(!is_array($worldName))  $worldName = explode('_',$name);
//                            dump($data);
                                $strWorld = strtolower(count($worldName)==3?substr($worldName[1],0,1):($this->isAllChinese($name)?'未编码':'z'));
                                if(empty($strWorld)){
                                    $data['sort_world'] = 'z';
                                }else{
                                    $data['sort_world'] = $strWorld;
                                }

                                Db::name('cloth')->insert($data);
                            }

                        }

//                    die();


                    }
                   }
                    $this->success('导入数据库成功','index');
                }
            } else{ //  不符合类型业务
                $this->error('不是excel文件,请重新上传...');
            }
        }else{
            $this->error('(⊙o⊙)~没传数据就导入');
        }
    }
    public function setExcel(){
          $startTime = strtotime(date('Y-m-1'));
          $endTime = strtotime(date('Y-m-20'));

        $orderWorld= Db::name('cloth')->group('sort_world')->field('sort_world')->order('sort_world asc')->select();

        $OrdersData= Db::name('cloth')->group('name')->field('sum(count) as total,name,sort_world')->where('time','>=',$startTime)->where('time','<=',$endTime)->order('sort_world asc')->select();
//        如果没有选中任何,则导出所有数据
        $data = array();

         foreach ($orderWorld as $k=>$value){

             foreach ($OrdersData as $k1=>$v1){
                 if($v1['sort_world'] == $value['sort_world']){
                     $data[$k][$value['sort_world'].'区'][] = $OrdersData[$k1]['name'] ;
                     $data[$k]['合计'][] = $OrdersData[$k1]['total'];
                 }
             }




         }
//                     dump($OrdersData);


        trace($OrdersData);

        //导入phpexcel类方法


        Vendor('PHPExcel.Classes.PHPExcel');
        Vendor('PHPExcel.PHPExcel.Classes.IOFactory');


        // Create new PHPExcel object
        $objPHPExcel = new \PHPExcel();

        // Set properties
        $objPHPExcel->getProperties()->setCreator("ctos")
            ->setLastModifiedBy("ctos")
            ->setTitle("Office 2007 XLSX Test Document")
            ->setSubject("Office 2007 XLSX Test Document")
            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
            ->setKeywords("office 2007 openxml php")
            ->setCategory("Test result file");




        // 水平居中(位置很重要,建议在最初始位置)
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('K')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//
//  合并 A1 I1
       
        // set table header content



        //set width
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30);
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(30);
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(30);
        $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(12);

        // Miscellaneous glyphs, UTF-8
        // for($i=0;$igetActiveSheet(0)->setCellValue('A'.($i+3), $OrdersData[$i]['uid']);
        //     $objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $OrdersData[$i]['user_name']);
        //     $objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $OrdersData[$i]['pwd']);
        //     $objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), $OrdersData[$i]['name']);


        //     $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':D'.($i+3))->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        //     $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':D'.($i+3))->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
        //     $objPHPExcel->getActiveSheet()->getRowDimension($i+3)->setRowHeight(16);
        // }
        $a = 'A';
        foreach ($data as $k => $v) {

                foreach ($data[$k] as $k1 => $v1) {

                    $objPHPExcel->getActiveSheet(0)->setCellValue($a . '1', $k1);

                    foreach ($v1 as $key => $value) {

                        $objPHPExcel->getActiveSheet(0)->setCellValue($a . ($key + 2), $value);


                    }
                    ++$a;
                }




        }


        //  sheet命名
        $objPHPExcel->getActiveSheet()->setTitle('领取记录汇总表');


        // Set active sheet index to the first sheet, so Excel opens this as the first sheet
        $objPHPExcel->setActiveSheetIndex(0);


        // excel头参数
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="2018.7.11-1-20.xls"');  //日期为文件名后缀
        header('Cache-Control: max-age=0');

        ob_clean();//关键
        flush();//关键
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //excel5为xls格式,excel2007为xlsx格式
        $objWriter->save('php://output');


    }
    public function trimall($str)//删除空格
    {
        $qian=array(" "," ","\t","\n","\r");$hou=array("","","","","");
        return str_replace($qian,$hou,$str);
    }
    public function isAllChinese($str){
//新疆等少数民族可能有·
        if(strpos($str,'·')){
//将·去掉,看看剩下的是不是都是中文
            $str=str_replace("·",'',$str);
            if(preg_match('/^[\x7f-\xff]+$/', $str)){
                return true;//全是中文
            }else{
                return false;//不全是中文
            }
        }else{
            if(preg_match('/^[\x7f-\xff]+$/', $str)){
                return true;//全是中文
            }else{
                return false;//不全是中文
            }
        }
    }

}

 

你可能感兴趣的:(php)