//前端代码导出 form.on('submit(export)', function (data) { var field = data.field; field.excel = 1 var str='' //组装参数 for (let key in field){ if(field[key]){ str+='/'+key+'/'+field[key] } } document.location.href=url'+str });
phpspreadsheet安装:
composer require phpoffice/phpspreadsheet
php代码
<?php use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; /** * Class Excel 正常导出 */ class Excel { private static $cellKey = array( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ' ); private static $length = 0; //长度 private static $width_row = [];//区间 private static $spreadsheet; private static $worksheet; private static $title; private static $style = [ 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, ], 'borders' => [ 'outline' => [ 'borderStyle' => Border::BORDER_THIN, 'color' => ['argb' => '000000'] ], ], 'font' => [ 'name' => '黑体', 'bold' => true, 'size' => 22 ] ]; /** * 初始化 */ public static function initialize() { self:: $spreadsheet = new Spreadsheet(); self:: $worksheet = self:: $spreadsheet->getActiveSheet(); self:: $worksheet->getDefaultColumnDimension()->setWidth(20);//设置默认宽度 self:: $worksheet->getDefaultRowDimension()->setRowHeight(30);//设置默认行高 } /**头部 * @param string $title * @param array $header * @param int $Prow */ public static function header($title = '售后订单', $header = array(), $Prow = 1) { self::initialize(); self::$length = count($header); self:: $title = date('Y-m-d') . ' ' . $title; if (self::$length > 0) { self:: $width_row = array_slice(self::$cellKey, 0, self::$length); } else { return '表格数量字段异常'; } self:: $worksheet->setTitle(self::$title); self:: $worksheet->getRowDimension($Prow)->setRowHeight(50);//设置第一行行高 self:: $worksheet->mergeCells(reset(self::$width_row) . $Prow . ':' . end(self::$width_row) . $Prow); self:: $worksheet->getStyle(reset(self::$width_row) . $Prow . ':' . end(self::$width_row) . $Prow)->applyFromArray(self::$style); //设置标题 $Prow++; self:: $worksheet->setCellValueByColumnAndRow(1, 1, self::$title); //设置副标题 self:: $worksheet->mergeCells(reset(self::$width_row).$Prow.':'.end(self::$width_row) . $Prow); self::$style['font']['size'] = 12; self:: $worksheet->getStyle('A2:J2')->applyFromArray(self::$style); //设置标题 self::bander(3, $header); return new self; } /** * 设置行高 */ public function RowHeight($num = 1, $heiht = 50) { self:: $worksheet->getRowDimension($num)->setRowHeight($heiht);//设置第一行行高 return $this; } /** * 合并 */ public function mergeCells($merge) { self:: $worksheet->mergeCells($merge); return $this; } /** * 副标题编写 */ public function setSubtitle($Value='') { if($Value){ self:: $worksheet->setCellValueByColumnAndRow(1, 2, $Value); } return $this; } /** * 设置导航 */ public static function bander($start = 2, $data) { foreach ($data as $k => $item) { $k = $k + 1; self:: $worksheet->setCellValueByColumnAndRow($k, $start, $item); } } /** * 设置内容 */ public function content($start = 3, $data) { foreach ($data as $item) { $start++; $cell_index = 1; foreach ($item as $v) { if ($v) { self:: $worksheet->setCellValueByColumnAndRow($cell_index, $start, $v); } $cell_index++; } } return $this; } public function save() { header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename=' . self:: $title . '.xlsx'); header('Cache-Control: max-age=0'); $write = IOFactory::createWriter(self::$spreadsheet, 'Xlsx'); $write->save('php://output'); exit(); } }