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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章