PHP导出批量、单独excel导出功能

批量导出excel思想:

  1. 把需要下载的excel文件都生成并保存到一个指定的临时目录
  2. new 一个压缩文件包,把目录中的文件都添加都压缩文件包中
  3. header()下载压缩文件包,删除临时目录和压缩文件包
/**
     * [Export_transcript 导出班级学生信息]
     * @author   Jim
     * @datetime 2020-5-25 T21:40:29+0800
     */
    public function Export_transcript(){
        $students = array(
            array(
                array("一班","张三","男","21"),
                array("一班","李四","男","22"),
                array("一班","王五","男","21")
            ),
            array(
                array("二班","张三2","男","21"),
                array("二班","李四2","男","22"),
                array("二班","王五2","男","21")
            ),
            array(
                array("三班","张三3","男","21"),
                array("三班","李四3","男","22"),
                array("三班","王五3","男","21")
            )

    );

        //循环生成每个班级的excel文件
        foreach ($students as $key => $student){

            $filename = "filename-".$key;//设置excel文件名称

            $headArr = array();//空表头

            $this->create_excel($filename,$headArr,$student);

        }

        $path = "Public/Download/tem";
        rmdir($path);

        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header('Content-disposition: attachment; filename=班级学生信息.zip'); //文件名
        header("Content-Type: application/zip"); //zip格式的
        header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
        header('Content-Length: '. filesize("transcript.zip")); //告诉浏览器,文件大小
        readfile("transcript.zip");
        unlink('transcript.zip');
        exit();
    }

    /**
     * [create_excel 生成excel并保存到指定目录]
     * @author   Jim
     * @datetime 2020-05-14T15:46:00+0800
     * @param $fileName (string) 导出后的文件名
     * @param $headArr (array) 表头信息
     * @param $data (array) 导出的数据
     */
    private function create_excel($fileName,$headArr,$data){
        //引入PHPExcel扩展文件
        vendor('PHPExcel\PHPExcel');
        vendor('PHPExcel.Writer.Excel5');
        vendor('PHPExcel.IOFactory.php');

        //对数据进行检验
        if(empty($data) || !is_array($data)){
            die("data must be a array");
        }

        //检查文件名
        if(empty($fileName)){
            exit;
        }

        $date = date("Y_m_d",time());
        $fileName .= "_{$date}.xls";

        //创建PHPExcel对象,注意,不能少了\
        $objPHPExcel = new \PHPExcel();

        //设置表头 超过26列
        $key = 0;
        foreach($headArr as $v){
            //注意,不能少了。将列数字转换为字母\
            $colum = \PHPExcel_Cell::stringFromColumnIndex($key);
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
            $key += 1;
        }


        $column = 2; //从第二行写入数据 第一行是表头
        $objActSheet = $objPHPExcel->getActiveSheet();

        foreach($data as $key => $rows){ //行写入
            $span = 0;
            foreach($rows as $keyName=>$value){// 列写入
                $j = \PHPExcel_Cell::stringFromColumnIndex($span);
                $objActSheet->setCellValue($j.$column, $value);
                $span++;
            }
            $column++;
        }

        $column = 2;
        $objActSheet = $objPHPExcel->getActiveSheet();
        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);

        //设置活动单指数到第一个表,所以Excel打开这是第一个表
        $objPHPExcel->setActiveSheetIndex(0);
        ob_end_clean();
        ob_start();

//      新建一个目录存放批量下载的excel文件,最后在批量下载
        $path = "Public/Download/tem/";
        if(!is_dir($path)){
            mkdir(iconv("UTF-8", "GBK", $path),0777,true);
        }

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save($path.$fileName); //保存到$path目录

        $zip = new \ZipArchive();
        if ($zip->open('transcript.zip', \ZipArchive::CREATE) === TRUE) {
            // 将保存的文件添加到zip文
            $zip->addFile($path.$fileName,$fileName);
            // 关闭zip文件
            $zip->close();
        }



//        单独直接导出excel文件
//        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;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值