Loading

thinkphp 使用phpExcel 导入和导出

一.导入

html部分

 

 

 

 

<div class="upexcel">
    <form class="form-horizontal"   method="post" action="{:url('detail/upexcel',['com_id'=>$company_id,'cty_id'=>$country_id])}" enctype="multipart/form-data">
       <input type="file" name="excel" />
       <input type="submit" value="立即导入" class="drexcel" />
    </form>
 </div>

 php部分:

//导入excel表格
    public function upexcel()
    {
        $request = request()->param();//tp获取数据

            $company_id = $request['com_id'];

            $country_id = $request['cty_id'];
    
        if (!empty($_FILES['excel']['name'])) {
            $fileName = $_FILES['excel']['name'];    //得到文件全名
            $dotArray = explode('.', $fileName);    //把文件名安.区分,拆分成数组
            $type = end($dotArray);//取出.后面的文件类型
            if ($type != "xls" && $type != "xlsx") {
                
                return "不是Excel文件,请重新上传!";
            }
        
            //取数组最后一个元素,得到文件类型
            $uploaddir = "uploads2/" . date("Y-m-d") . '/';//设置文件保存目录 注意包含 '/'
            if (!file_exists($uploaddir)) {
                mkdir($uploaddir, 0777, true);
            }
            
            $path = $uploaddir . md5(uniqid(rand())) . '.' . $type; //产生随机文件名
            //$path = "images/".$fileName; //客户端上传的文件名;
            //下面必须是tmp_name 因为是从临时文件夹中移动
            move_uploaded_file($_FILES['excel']['tmp_name'], $path); //从服务器临时文件拷贝到相应的文件夹下
            // unset($path);
            
            $file_path = $path;
            if (!file_exists($path)) {
                
                return '上传文件丢失!';
            }
            
            Vendor('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的

            //文件的扩展名
            $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
            if ($ext == 'xlsx') {
                $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
                $objPHPExcel = $objReader->load($file_path, 'utf-8');
            } elseif ($ext == 'xls') {
                $objReader = \PHPExcel_IOFactory::createReader('Excel5');
                $objPHPExcel = $objReader->load($file_path, 'utf-8');
            }
    
            $sheet = $objPHPExcel->getSheet(0);
            $highestRow = $sheet->getHighestRow(); // 取得总行数
            $highestColumn = $sheet->getHighestColumn(); // 取得总列数
            $ar = array();
            $i = 0;
            $importRows = 0;
            for ($j = 2; $j <= $highestRow; $j++) {
                $importRows++;
                $c_time = (string)$objPHPExcel->getActiveSheet()->getCell("A$j")->getValue();//需要导入的c_time
                $is_ok = (string)$objPHPExcel->getActiveSheet()->getCell("B$j")->getValue();   //需要导入的is_ok
                $order_num = (string)$objPHPExcel->getActiveSheet()->getCell("C$j")->getValue(); //需要导入的order_num
                $products = (string)$objPHPExcel->getActiveSheet()->getCell("D$j")->getValue();     //需要导入的products
                $sku = (string)$objPHPExcel->getActiveSheet()->getCell("E$j")->getValue();   //需要导入的字段sku
                $platform_income = (string)$objPHPExcel->getActiveSheet()->getCell("F$j")->getValue();
                $cost = (string)$objPHPExcel->getActiveSheet()->getCell("G$j")->getValue();
                $international_freight = (string)$objPHPExcel->getActiveSheet()->getCell("H$j")->getValue();
                $freight_forwarding = (string)$objPHPExcel->getActiveSheet()->getCell("I$j")->getValue();
                $platform_deduction = (string)$objPHPExcel->getActiveSheet()->getCell("J$j")->getValue();
                $other1 = (string)$objPHPExcel->getActiveSheet()->getCell("K$j")->getValue();
                $net_profit = (string)$objPHPExcel->getActiveSheet()->getCell("L$j")->getValue();
                
                $ret['mdata'] = DetailModel::create(['c_time'=>$c_time,'is_ok'=> $is_ok,

                'order_num'=> $order_num, 'products'=>$products,'sku'=> $sku,
                'platform_income'=> $platform_income,'cost'=> $cost,'international_freight'=> $international_freight,'freight_forwarding'=> $freight_forwarding,'platform_deduction'=> $platform_deduction,'other1'=> $other1,'net_profit'=> $net_profit,
                'company_id'=>$company_id,'country_id'=>$country_id,'c_time_month'=>$c_time,//额外用到的字段
                ]);//这里就是我的数据库添加操作定义的一个方法啦,对应替换为自己的
    
                if ($ret['mdata'] && !is_Bool($ret['mdata'])) {
                    $ar[$i] = $ret['mdata'];
                    $i++;
                }
            }
            unlink(ROOT_PATH .'public/'.$path);//导入数据库成功的时候,删除excel文件
            if ($i > 0) {
                
                return "导入完毕!请勿重复刷新";
            }
            return "导入成功!";
        } else {
            
            return "上传文件失败!";
        }
    }

 

二.导出

直接上php代码

public function daochu(){

        $request = request()->param();

        $company_id = $request['com_id'];

        $country_id = $request['cty_id'];

        $month = $request['month'];

        $xlsData = DetailModel::where(['company_id'=>$company_id,'country_id'=>$country_id,'c_time_month'=>$month])->order('id', 'asc')->select();//获取全部对应内容 按照自己的查询条件写 肯定要改的

        // halt($xlsData);

        $company_name = CompanyModel::where('id',$company_id)->value('company_name');//获取公司名

        $country_name = CountryModel::where(['company_id'=>$company_id,'id'=>$country_id])->value('c_name');//获取对应正确国家名

        $notice = $company_name.'_'.$country_name;



        $sum = round(DetailModel::where(['company_id'=>$company_id,'country_id'=>$country_id,'c_time_month'=>$month])->sum('net_profit'),2); // 总净利润 总和

        // halt($country['c_name']);

        Vendor('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的

        Vendor('PHPExcel.PHPExcel.Worksheet.Drawing');

        Vendor('PHPExcel.PHPExcel.Writer.Excel2007');

        $objExcel = new \PHPExcel();

        //set document Property

        $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');

    

        $objActSheet = $objExcel->getActiveSheet();

        $key = ord("A");

        $letter =explode(',',"A,B,C,D,E,F,G,H,I,J,K,L,M,N");

        $arrHeader = array('日期','订单状态','订单编号','产品名称','SKU','平台售价','进货成本','国际运费','货代','平台扣费','其他','净利润','总利润');

        //填充表头信息

        $lenth =  count($arrHeader);

        for($i = 0;$i < $lenth;$i++) {

            $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");

        };

        //填充表格信息

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

            $k +=2;

            $objActSheet->setCellValue('A'.$k,$v['c_time']);

            $objActSheet->setCellValue('B'.$k, $v['is_ok']);

            $objActSheet->setCellValue('C'.$k, $v['order_num']);

            $objActSheet->setCellValue('D'.$k, $v['products']);

            $objActSheet->setCellValue('E'.$k, $v['sku']);

            $objActSheet->setCellValue('F'.$k, $v['platform_income']);

            $objActSheet->setCellValue('G'.$k, $v['cost']);

            $objActSheet->setCellValue('H'.$k, $v['international_freight']);

            $objActSheet->setCellValue('I'.$k, $v['freight_forwarding']);

            $objActSheet->setCellValue('J'.$k, $v['platform_deduction']);

            $objActSheet->setCellValue('K'.$k, $v['other1']);

            $objActSheet->setCellValue('L'.$k, $v['net_profit']);

            // 表格高度

            $objActSheet->getRowDimension($k)->setRowHeight(20);

        }

        if(@$k){

            $objActSheet->setCellValue('M'.$k, $sum);//算出的总和,就一个值所以不能循环

        }

        $width = array(10,15,20,25,30);

        //设置表格的宽度

        $objActSheet->getColumnDimension('A')->setWidth($width[1]);

        $objActSheet->getColumnDimension('B')->setWidth($width[2]);

        $objActSheet->getColumnDimension('C')->setWidth($width[3]);

        $objActSheet->getColumnDimension('D')->setWidth($width[4]);

        $objActSheet->getColumnDimension('E')->setWidth($width[1]);

        $objActSheet->getColumnDimension('F')->setWidth($width[1]);

        $objActSheet->getColumnDimension('G')->setWidth($width[1]);

        $objActSheet->getColumnDimension('H')->setWidth($width[1]);

        $objActSheet->getColumnDimension('I')->setWidth($width[1]);

        $objActSheet->getColumnDimension('J')->setWidth($width[1]);

        $objActSheet->getColumnDimension('K')->setWidth($width[1]);

        $objActSheet->getColumnDimension('L')->setWidth($width[1]);

        $objActSheet->getColumnDimension('M')->setWidth($width[1]);

        $objActSheet->getColumnDimension('N')->setWidth($width[1]);

        $outfile = $notice."_".$month."月订单信息列表.xlsx";

        ob_end_clean();

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

        header("Content-Type: application/octet-stream");

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

        header('Content-Disposition:inline;filename="'.$outfile.'"');

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

        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

        header("Pragma: no-cache");

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

    }

完成.

 

posted @ 2021-05-10 11:19  mingBolg  阅读(149)  评论(0编辑  收藏  举报