自己測試,在yii2中實現PHPExcel數據導出實例

以導出學生信息表爲例
1.首先,下載相應的PHPExcel插件,放到項目合適的目錄下,如common\extensions
2.創建StudentController

<?php

class StudentController extends \yii\web\Controller{

    public function actionExportStudentMessage(){
        StudentService::service()->exportStudentMessage();
    }
​
}

3.創建StudentExcelService

<?php

class StudentExcelService extends \Common\services\BaseServices{
    public $filename;           //文件名稱

    public function __construct($filename = '')
    {
        parent::__construct();
        $this->filename = $filename;
        require_once(xxxxx/phpexcel/PHPExcel.php');
        require_once(xxxxx/phpexcel/PHPExcel/IOFactory.php');
    }

    //生成Excel表格數據    
    public function exportListToFile($objPHPExcel)
    {
        header('Content-Type: application/vnd.ms-excel;charset=utf-8');
        header('Content-Disposition: attachment;filename=' . urlencode($this->filename . ".xls") . '');
        header('Cache-Control: max-age=0');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;//一定要緊跟exit 要不然會有列數限制或說文件損壞之類
    }

}

4.創建對應的StudentService

<?php

class StudentService extends StudentExcelService{

    public funciton exportStudentMessage()
    {
       $this->filename = "學生信息表".date("Y-m-d");     
        $first_row_array = array(
                "id"=>"編號",
                "name"=>"姓名",
                "sex"=>"性別",
                "age"=>"年齡"
            );
        #獲取導出數據
        $list = $this->getStudentInfo();
        list($objPHPExcel, $excel_row_char, $line_num) = $this->setFirstLine($first_row_array, $title = '學生信息');
        #設置表格數據內容
        $this->setStudentExport($list, $excel_row_char, $objPHPExcel, $line_num);
        #導出excel文件
        $this->exportListToFile($objPHPExcel);
    }

    
    public function setFirstLine($first_row_array, $title)
    {
        $row_char = 'A';
        $first_line_num = '2';
        $objPHPExcel = new \PHPExcel();
        $objPHPExcel
            ->getProperties()
            ->setCreator($title . "導出")
            ->setLastModifiedBy($title . "導出")
            ->setTitle($title . "導出")
            ->setSubject($title . "導出")
            ->setDescription($title . "導出")
            ->setKeywords("excel")
            ->setCategory("result file");
    #設置樣式,寬度,居中
    $dao = $objPHPExcel->setActiveSheetIndex(0);
    $excel_row_char = array();
    foreach ($first_row_array as $key => $value) {
        $excel_row_char[$key] = $row_char;
        $dao->setCellValue($row_char . $first_line_num, $value);
        $row_char++;
    }
    return array($objPHPExcel, $excel_row_char, $first_line_num);
}

public function setStudentExport($data, $excel_row_char, \PHPExcel $objPHPExcel, $line_num)
{
    $styleArray1 = array(
        'alignment' => array(
            'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
        ),
    );
    $dao = $objPHPExcel->setActiveSheetIndex(0);
    $dao->getDefaultColumnDimension()->setWidth(15);
    $dao->getColumnDimension('B')->setWidth(30);
    $dao->getColumnDimension('C')->setWidth(60);
    $dao->getRowDimension('1')->setRowHeight(22);
    $dao->getRowDimension('2')->setRowHeight(20);
    $dao->getStyle('A1')->getFont()->setBold(true);
    $dao->getStyle('A1')->getFont()->setSize(16);
    $dao->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $dao->getStyle('A2:D2')->getFont()->setBold(true);
    $dao->getStyle('A2:D2')->getFont()->setSize(10);
    $dao->getStyle('A2:D2')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $dao->getStyle('A2:D2')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
    $dao->mergeCells('A1:D1');
    $dao->setCellValue('A1', '學生信息表');
    $dao->freezePane('A3');
    $objPHPExcel->getActiveSheet()->getStyle('A:D')->applyFromArray($styleArray1);
    foreach ($data as $key => $list) {
        $line_num += 1;
        $dao->setCellValueExplicit($excel_row_char['id'] . $line_num, $list['id'])
            ->setCellValue($excel_row_char['name'] . $line_num, $list['name'])
            ->setCellValue($excel_row_char['age'] . $line_num, $list['age'])
            ->setCellValue($excel_row_char['sex'] . $line_num, $list['sex']);
        unset($data[$key]);
    }
}


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