php layui excel导出

//前端代码导出
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();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值