php 导出数据到Excel

当前使用PHPExcel 1.6版本(1.8版本还可简化)
    //导出Excel
    public function outExcel() {// 设置文件名
        $file_name = date("YmdHis",time()).".xlsx";
       $headerData = ['表头1', '表头2', '表头3', ...];
        $sheet_title = 'Excel表名';
        $columnWidths = [10, 10, 45, 40, 10, 20];
        $atsk = ["作者","标题", "主题","描述"];//按表头$headerData顺序设置数据
        $arr = array(array('数据1','数据2','数据3',...),array('数据1','数据2','数据3',...),...);
        // 输出 Excel 文件
        $this->createExcel($file_name,$sheet_title,$headerData,$columnWidths,$arr,$atsk);
    }

    /**
     * 创建 Excel 文件
     * @param string $file_name 文件名
     * @param string $sheet_title 工作表名称
     * @param array $headerData 表头数据
     * @param array $columnWidths 列宽
     * @param array $atsk 任务数组[0=>'创建者、最后修改者',1=>'标题',2=>'主题',3=>'描述']
     * @param array $DataArr 数据数组
     * @param string $file_type 文件类型,默认为 Excel2007
     * @return void
     */
    function createExcel($file_name,$sheet_title,$headerData,$columnWidths,$dataArr,$atsk,$file_type='Excel2007'){
        // 引入 Excel 类库
        vendor('Excel.PHPExcel');
        vendor('Excel.PHPExcel.IOFactory');

        // 创建一个新的 Excel 对象
        $objPHPExcel = new \PHPExcel();
        
        // 设置文档属性
        $objPHPExcel->getProperties()->setCreator($atsk[0]);
        $objPHPExcel->getProperties()->setLastModifiedBy($atsk[0]);
        $objPHPExcel->getProperties()->setTitle($atsk[1]);
        $objPHPExcel->getProperties()->setSubject($atsk[2]);
        $objPHPExcel->getProperties()->setDescription($atsk[3]);

        //当前操作的工作表对象
        $sheet = $objPHPExcel->getActiveSheet();
    
        // 设置工作表名称
        $sheet->setTitle($sheet_title);
    
    
        // 设置通用样式
        $styleArray = [
            'alignment' => [
                'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
                'vertical' => \PHPExcel_Style_Alignment::VERTICAL_CENTER,
            ],
        ];
        // 设置表头样式
        $headerStyle = [
            'alignment' => $styleArray['alignment'],
            'font' => ['bold' => true],
        ];
        // 写入表头数据
        foreach ($headerData as $index => $header) {
            $sheet->setCellValueByColumnAndRow($index, 1, $header);
            $sheet->getColumnDimensionByColumn($index)->setWidth($columnWidths[$index]);
            $sheet->getStyleByColumnAndRow($index, 1)->applyFromArray($headerStyle);
        }

        // 写入数据
        $rowNumber = 2;//从第二行开始写入数据
        foreach ($dataArr as $value) {
            for ($index = 0; $index < count($value); $index++) {
                $sheet->setCellValueByColumnAndRow($index, $rowNumber, $value[$index]);
                $sheet->getStyleByColumnAndRow($index, $rowNumber)->applyFromArray($styleArray);
            }
            $rowNumber++;
        }
    
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="'. $file_name. '"');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, $file_type);
        $objWriter->save('php://output');
    }

 

posted @ 2024-11-11 17:27  枫落曳  阅读(59)  评论(0)    收藏  举报