Use phpExcel in fastadmin to export table data to excel

Although the table in fastadmin comes with export excel, but that thing is not easy to use. Every time you click export, the table is refreshed. The data of the last seven days is defaulted. So in desperation, I have to find another way. Don't talk nonsense, then Let's talk about the use of phpExcel:

One, download phpExcel

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

After completion, the following folders will appear 

 The internal directory of this renamed folder is as follows:

 Second, copy the PHPExcel folder enclosed in the above picture to your project

 Third, add an export method to your controller:

 /**
             * 导出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');
            }

Four: Add an export button to your html page:

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

Five: call the export method in your js file:

Note that you must use window.location.href, do not use ajax request, otherwise the browser will not appear the download bar, this issue has been written in my previous blog, you can read it if you are interested. 

The export method refers to https://blog.csdn.net/adorablewolf/article/details/88394160

Guess you like

Origin blog.csdn.net/qq_41588568/article/details/109000580