首页 > 技术文章 > laravel-admin 导出数据

vinzen 2019-03-29 16:03 原文

一 . 导出数据库原生字段

 

 

 

 

二 .导出自定义字段

$filename = "停用日志";
$grid->exporter(new ExcelExpoter($grid, $filename));



namespace App\Admin\Extensions;

use Encore\Admin\Grid\Column;
use Encore\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Facades\Excel;

class ExcelExpoter extends AbstractExporter
{
    public $titles = [];

    public function __construct($grid, $name)
    {
        $this->grid = $grid;
        $this->tablename = $name;
    }

    public function export()
    {
        Excel::create($this->tablename . date('Y-m-d'), function ($excel) {

            $excel->setTitle('这是啥');
            $excel->setCreator('Creator这又是啥')
                ->setCompany('Maatwebsite又是什么鬼');
            $excel->setDescription('Description这个好像挺长,写点啥呢');
            $columns = $this->grid->columns();
            if (!empty($columns)) {
                foreach ($columns as $c) {
                    array_push($this->titles, $c->getLabel());
                }
            }
            $excel->sheet($this->tablename, function ($sheet) {
                $this->grid->build();
                // 这段逻辑是从表格数据中取出需要导出的字段
                $modelColumnNames = [];
                $titleNames = [];
                $this->grid->columns()->map(function (Column $column) use (&$modelColumnNames, &$titleNames) {
                    if ($column->getName() != '__row_selector__') {
                        array_push($modelColumnNames, $column->getName());
                        array_push($titleNames, $column->getLabel());
                    }
                });
                $modelColumnNames = array_unique($modelColumnNames);
                $titleNames = array_unique($titleNames);
                $sheet->rows([$titleNames]);

                $rows = $this->grid->rows();
                $datas = $rows->map(function ($item) use ($modelColumnNames) {
                    $row = array();
                    $model = $item->model();
                    foreach ($modelColumnNames as $key) {
                        $row[$key] = $this->cutstr_html($model[$key]);
                    }
                    return $row;
                });
                $sheet->rows($datas);
            });

        })->export('xls');
    }


    //去掉文本中的HTML标签
    public function cutstr_html($string, $length = 0, $ellipsis = '…')
    {
        $string = strip_tags($string);
        $string = preg_replace('/\n/is', '', $string);
        $string = preg_replace('/ | /is', '', $string);
        $string = preg_replace('/ /is', '', $string);
        $string = preg_replace('/<br \/>([\S]*?)<br \/>/','<p>$1<\/p>',$string);
        preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/", $string, $string);
        if (is_array($string) && !empty($string[0])) {
            if (is_numeric($length) && $length) {
                $string = join('', array_slice($string[0], 0, $length)) . $ellipsis;
            } else {
                $string = implode('', $string[0]);
            }
        } else {
            $string = '';
        }
        return $string;
    }
}

  

推荐阅读