thinkphp3.2导入与导出

本文介绍如何使用PHPExcel库在ThinkPHP框架下实现Excel数据的导入与导出功能,包括控制器编写、数据处理及HTML页面展示等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先下载PHPExcel安装包,解压只需要文件夹PHPExcel和文件PHPExcel.php放到框架:ThinkPHP\Library\Vendor\PHPExcel中

1-1.建立控制器:

 //显示导入
    public function index(){
        $this->display('excels/excels');
    }
    //上传文件操作
    public function excels(){
         if (IS_POST) {
            // 上传
            $upload = new \Think\Upload();// 实例化上传类
            $upload->maxSize   =     3145728 ;// 设置附件上传大小
            $upload->exts      =     array('xlsl','xls');// 设置附件上传类型
            $upload->rootPath  =     './Uploads/'; // 设置附件上传根目录
            $upload->savePath  =     'Excel/'; // 设置附件上传(子)目录
            // 上传文件  
            $info   =   $upload->upload();
            if (!$info) {
                $this->error($upload->getError());exit;
            }
            $file_name =  $upload->rootPath.$info['files']['savepath'].$info['files']['savename'];
            // exl
            $exl = $this->excelIn($file_name);
            $data = array();
             foreach ($exl as $key => $value) {
                 $aa = array(
                     "name"=>trim($value[0]),
                     "address"=>trim($value[1]),
                     "phone"=>trim($value[2])
                );
                if(!empty($aa)){
                    $data[] = $aa;
                }
             }
             //print_r($data);die;
            $arr=M('user')->addAll($data);
            $this->success("导出成功",'index/index');
        }else{
            $this->display();
        }
     }

     // 处理上传exl数据
    function excelIn($file_name){
        Vendor('PHPExcel.PHPExcel');
        Vendor('PHPExcel.IOFactory');
        if ('xlsx' == substr(strrchr($file_name,"."),1)) {
            $objReader=\PHPExcel_IOFactory::createReader('Excel2007');
        }else{
            $objReader=\PHPExcel_IOFactory::createReader('Excel5');
        }
        $objReader=\PHPExcel_IOFactory::createReader('Excel5');
        $objPHPExcel=$objReader->load($file_name);//$file_url即Excel文件的路径
        $sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
        $highestRow=$sheet->getHighestRow();//取得总行数
        $highestColumn=$sheet->getHighestColumn(); //取得总列数
        $res_data=NULL;
        $res_top=NULL;
        for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据
             $str='';
            for($k='B';$k<=$highestColumn;$k++){            //从A列读取数据
                $res_data[$j-1][]=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();                          
            }
        }
        unlink($file_url);
        return $res_data;
    }

2.简单导出功能

2-1.html页面

<!DOCTYPE html>
<html>
<head>
    <title>导出</title>
</head>
<body>
    <table>
        <tr>
          <td>姓名</td>
          <td>地址</td>
          <td>联系方式</td>
        </tr>
    <foreach name='data' item='val'>
        <tr>
          <td>{$val.name}</td>
          <td>{$val.address}</td>
          <td>{$val.phone}</td>
        </tr>
    </foreach>
    </table>
    <a href="{:U('index/daochu')}">导出</a>
</body>
</html>

2-2.控制器层

/*
    * 导出
    * */
    public function index(){
        $model = M('user');
        $arr = $model->field()->select();
        $this->assign('data',$arr);
        $this->display('excels/chu');
    }
     /*
     导出用户信息
      */
     public function daochu(){
        $arr= M('user')->field()->select();
        $headArr = array('编号','姓名','地址','联系方式');
        $filename = "网络部.xls";
        // foreach ($arr as $k=>$row){
        //     $arr[$k][time] = date("Y-m-d H:i:s",$row['time']);
        // } //
        echo "<td style='vnd.ms-excel.numberformat:@'>".$printable."</td>\n";
        $this->getExcel($filename,$headArr,$arr);
    }

          private  function getExcel($fileName,$headArr,$data){
        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
        Vendor('PHPExcel.PHPExcel');
        Vendor('PHPExcel.IOFactory');

        //创建PHPExcel对象,注意,不能少了\
        $objPHPExcel = new \PHPExcel();
        // 字体
        $objPHPExcel->getDefaultStyle()->getFont()->setName('宋体');
        // $objPHPExcel->getDefaultStyle()->getFont()->setSize(7);
        // $objPHPExcel->getActiveSheet()->getStyle("A1:A".(count($array['spectitle'][$value['conf_name']])+1))->getFont()->setSize(14);
        $objProps = $objPHPExcel->getProperties();

        // $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10); // 行间距

        //设置表头
        $key = ord("A");
        //print_r($headArr);exit;
        foreach($headArr as $v){
            $colum = chr($key);
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
            $key += 1;
        }

        $column = 2;
        $objActSheet = $objPHPExcel->getActiveSheet();

        //print_r($data);exit;
        foreach($data as $key => $rows){ //行写入
            $span = ord("A");
            foreach($rows as $keyName=>$value){// 列写入
                $j = chr($span);
                $objActSheet->setCellValue($j.$column, $value);
                $span++;
            }
            $column++;
        }

        $fileName = iconv("utf-8", "gb2312", $fileName);

        //重命名表
        //$objPHPExcel->getActiveSheet()->setTitle('test');
        //设置活动单指数到第一个表,所以Excel打开这是第一个表
        $objPHPExcel->setActiveSheetIndex(0);
        ob_end_clean();//清除缓冲区,避免乱码
        header('Content-Type: application/vnd.ms-excel');
        header("Content-Disposition: attachment;filename=\"$fileName\"");
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output'); //文件通过浏览器下载
        exit;
    }

未完还有带有条件的导出功能.........







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值