fastadmin에서 phpExcel을 사용하여 테이블 데이터를 Excel로 내 보냅니다.

fastadmin의 테이블에는 export 엑셀이 포함되어 있지만 사용하기 쉽지 않습니다. 내보내기를 클릭 할 때마다 테이블이 새로 고쳐집니다. 지난 7 일 동안의 데이터가 기본값으로 설정되어 있습니다. 그래서 절망적으로 다른 방법을 찾아야합니다. 말도 안되는 말을하지 말고 phpExcel의 사용에 대해 이야기 해보자 :

하나, phpExcel 다운로드

git clone https://github.com/PHPOffice/PHPExcel

완료되면 다음 폴더가 나타납니다. 

 이 이름이 변경된 폴더의 내부 디렉토리는 다음과 같습니다.

 둘째, 위 그림에 포함 된 PHPExcel 폴더를 프로젝트에 복사합니다.

 셋째, 컨트롤러에 내보내기 방법을 추가합니다.

 /**
             * 导出EXCEL
             */
            public function export()
            {
                //查询数据库信息
                try {
                    $xlsData = Db::table('fw_goods')->select();
                } catch (\Exception $e) {
                    return $e->getMessage();
                }
                Vendor('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的
                Vendor('PHPExcel.PHPExcel.Worksheet.Drawing');
                Vendor('PHPExcel.PHPExcel.Writer.Excel2007');
                //实例化
                $objExcel = new \PHPExcel();
                //设置文档属性
                $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
                //设置内容
                $objActSheet = $objExcel->getActiveSheet();
                $key = ord("A");
                $letter = explode(',', "A,B,C,D,E,F");
                $arrHeader = array('时间', '当日扫码量', '当日预警量', '当日无效码量');
                //填充表头信息
                $lenth = count($arrHeader);
                for ($i = 0; $i < $lenth; $i++) {
                    $objActSheet->setCellValue("$letter[$i]1", "$arrHeader[$i]");
                };
                //填充表格信息
                foreach ($xlsData as $k => $v) {
                    $k += 2;
                    //表格内容
                    $objActSheet->setCellValue('A' . $k, $v['id']);
                    $objActSheet->setCellValue('B' . $k, $v['company_id']);
                    $objActSheet->setCellValue('C' . $k, $v['name']);
                    $objActSheet->setCellValue('D' . $k, date('Y-m-d H:i:s', $v['createtime']));
                    $objActSheet->setCellValue('E' . $k, $v['goods_images']);
                    // 图片生成
                    //$objDrawing[$k] = new \PHPExcel_Worksheet_Drawing();
                    //$objDrawing[$k]->setPath(ROOT_PATH."public/static/image/playbtn.png");
                    // 设置宽度高度
                    //$objDrawing[$k]->setHeight(40);//照片高度
                    //$objDrawing[$k]->setWidth(40); //照片宽度
                    // 设置图片要插入的单元格
                    //$objDrawing[$k]->setCoordinates('C' . $k);
                    // 图片偏移距离
                    //$objDrawing[$k]->setOffsetX(30);
                    //$objDrawing[$k]->setOffsetY(12);
                    //$objDrawing[$k]->setWorksheet($objExcel->getActiveSheet());

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

                $width = array(20, 20, 15, 10, 10, 30, 10, 15);
                //设置表格的宽度
                $objActSheet->getColumnDimension('A')->setWidth($width[5]);
                $objActSheet->getColumnDimension('B')->setWidth($width[1]);
                $objActSheet->getColumnDimension('C')->setWidth($width[0]);
                $objActSheet->getColumnDimension('D')->setWidth($width[5]);
                $objActSheet->getColumnDimension('E')->setWidth($width[5]);

                $outfile = md5("扫码明细" . time()) . ".xlsx";
                ob_end_clean();
                header("Content-Type: application/force-download");
                header("Content-Type: application/octet-stream");
                header("Content-Type: application/download");
                header('Content-Disposition:inline;filename="' . $outfile . '"');
                header("Content-Transfer-Encoding: binary");
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                header("Pragma: no-cache");
                $objWriter->save('php://output');
            }

4 : HTML 페이지에 내보내기 버튼 추가 :

<a href="javascript:;" style="float: right;margin-top: 10px;" class="btn btn-success btn-export {:$auth->check('data/barcodedata/export')?'':'hide'}" title="{:__('Export')}" id="btn-export-file"><i class="fa fa-download"></i> {:__('Export')}</a>

5 : js 파일에서 export 메서드를 호출합니다.

window.location.href를 사용해야하며, ajax 요청을 사용하지 마십시오. 그렇지 않으면 브라우저에 다운로드 바가 표시되지 않습니다.이 문제는 이전 블로그에 작성되었으며 관심이있는 경우 읽을 수 있습니다. 

내보내기 방법은 https://blog.csdn.net/adorablewolf/article/details/88394160참조합니다.

추천

출처blog.csdn.net/qq_41588568/article/details/109000580