1. 程式人生 > >yii2 excel 匯出 (圖片加設定寬高水平垂直居中)

yii2 excel 匯出 (圖片加設定寬高水平垂直居中)

   composer require "phpoffice/phpexcel"    用這個命令下載就可以(等一會時間),前提是你已經安裝的composer 如果沒有,就安裝一個,就不多說了。

   安裝完成後 window 下開啟命令視窗 輸入compposer 檢視是否安裝成功,然後開啟你的yii2.0(高階版)框架的verdor 這個資料夾 Shift+右鍵,開啟命令視窗,執行上面那個下載命令他就會自動下載並配置好了。 如果出現phpoffice這個資料夾就對了(裡面有PHPExcel 這個檔案)。

   然後在Controller裡面引入  use \PHPExcel;  記得要加“\”哦。   然後在方法裡實例化就可以了,在具體的excel方法前面也要加‘\’不然會報錯。

   最後就是匯出了, 這個比較簡單   這 只是一個簡單的例子 

 

/**
     * 匯出excel
     */
    public function actionExcel()
    {
        $time = date('Y-m-d H-i-s', time());
        $names = $time . '裝置資料' . '.xls';
        $objPHPExcel = new \PHPExcel();
        $query = new \yii\db\Query();
        $query = $query->select("t1.*, t2.series_name, t2.series_model, t2.series_rows")
            ->from(['t1' => 'ss_equipment'])
            ->leftJoin(['t2' => 'ss_series'], "t1.series_id = t2.id")
            ->where(1);
        $list = $query->all();
        /*以下就是對處理Excel裡的資料, 橫著取資料,主要是這一步,其他基本都不要改*/
        foreach($list as $k=>$v) {
            $num= $k+1;
            $objPHPExcel->setActiveSheetIndex(0)
//Excel的第A列,uid是你查出陣列的鍵值,下面以此類推
                ->setCellValue('A'.$num, $v['id'])
                ->setCellValue('B'.$num, $v['series_id'])
                ->setCellValue('C'.$num, $v['serial_number'])
                ->setCellValue('D'.$num, $v['series_name'])
                ->setCellValue('E'.$num, $v['series_model'])
                ->setCellValue('F'.$num, $v['series_rows'])
                ->setCellValue('G'.$num, $v['status'])
                ->setCellValue('H'.$num, $v['created'])
                ->setCellValue('I'.$num, $v['updated']);
        }
        $objPHPExcel->getActiveSheet()->setTitle('User');
        $objPHPExcel->setActiveSheetIndex(0);
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $names . '"'); //excel表格名稱
        header('Cache-Control: max-age=0');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        return $this->returnData('', 1, '匯出成功');
    }

 

上面是快速匯出,下面是(圖片加設定寬高水平垂直居中)

/**
     * 匯出excel
     */
    public static function actionExcel($equipment_numbers = "")
    {
        //設定檔名稱
        $time = date('Y-m-d H-i-s', time());
        $names = $time . '新增裝置規則資料' . '.xls';
        $query = new \yii\db\Query();
        $query = $query->select("t1.*, t2.series_name, t2.series_model, t2.series_rows")
            ->from(['t1' => 'ss_equipment'])
            ->leftJoin(['t2' => 'ss_series'], "t1.series_id = t2.id")
            ->where(1);
        if($equipment_numbers != null){
            $query ->andWhere(['in','serial_number',$equipment_numbers]);
        }
        $list = $query->all();
        // 匯出Exl
        $objPHPExcel = new \PHPExcel();
        $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
        $objActSheet = $objPHPExcel->getActiveSheet();

        // 水平居中(位置很重要,建議在最初始位置)
        $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);

        $objActSheet->setCellValue('A1', 'id');
        $objActSheet->setCellValue('B1', '裝置id');
        $objActSheet->setCellValue('C1', '裝置號');
        $objActSheet->setCellValue('D1', '系列名稱');
        $objActSheet->setCellValue('E1', '裝置型號');
        $objActSheet->setCellValue('F1', '排數');
        $objActSheet->setCellValue('G1', '狀態');
        $objActSheet->setCellValue('H1', '建立時間');
        $objActSheet->setCellValue('I1', '更新時間');
        $objActSheet->setCellValue('J1', '圖片地址');

        // 設定個表格寬度
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(80);

        // 垂直居中
        $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('J')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);

        /*以下就是對處理Excel裡的資料, 橫著取資料,主要是這一步,其他基本都不要改*/
        foreach ($list as $k => $v) {
            $k +=2;
            $v['created'] = isset($v['created']) ?$v['created'] :"";
            $v['created'] = date('Y-m-d h:i:s',$v['created']);
            $v['updated'] = isset($v['updated']) ?$v['updated'] :"";
            $v['updated'] = date('Y-m-d h:i:s',$v['updated']);

            $objActSheet->setCellValue('A'.$k, $v['id']);
            $objActSheet->setCellValue('B'.$k, $v['series_id']);
            $objActSheet->setCellValue('C'.$k, $v['serial_number']);
            $objActSheet->setCellValue('D'.$k, $v['series_name']);
            $objActSheet->setCellValue('E'.$k, $v['series_model']);
            $objActSheet->setCellValue('F'.$k, $v['series_rows']);
            $objActSheet->setCellValue('G'.$k, $v['status']);
            $objActSheet->setCellValue('H'.$k, $v['created']);
            $objActSheet->setCellValue('I'.$k, $v['updated']);
            $objActSheet->setCellValue('J'.$k);

           // 圖片生成
            $img=new \PHPExcel_Worksheet_Drawing();
            $img->setPath(ROOT_DIR.$v['img']);//寫入圖片路徑

            // 設定寬度高度
            $img->setHeight(80);//照片高度
            $img->setWidth(80); //照片寬度
            /*設定圖片要插入的單元格*/
            $img->setCoordinates('J'.$k);
            // 圖片偏移距離
            $img->setOffsetX(12);
            $img->setOffsetY(12);
            $img->setWorksheet($objPHPExcel->getActiveSheet());


            // 表格高度
            $objActSheet->getRowDimension($k)->setRowHeight(80);

        }
        //設定活動單指數到第一個表,所以Excel開啟這是第一個表
        $objPHPExcel->setActiveSheetIndex(0);
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $names . '"'); //excel表格名稱
        header('Cache-Control: max-age=0');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');//檔案通過瀏覽器下載
    }