Failed to load excel\laravel-excel

六月ゝ 毕业季﹏ 提交于 2021-01-29 15:14:07

问题


I want to export only filtered data in view blade. I am using Laravel 7 and maatwebsite/excel 3.1 and PHP 7.4.2.

I went through the documentation and applied this:

View

<a href="{!! route('users.export-filter') !!}" class="btn btn-success">
    <i class="la la-download"></i>
    Export Filter
</a>

web.php

Route::get('/users/export-filter', 'Admin\UserController@filter')->name('users.export-filter');

UserController.php

public function filter()
{
    return Excel::download(new FilterUserExport, 'filter.xlsx');
}

FilterUserExport.php

<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use Modules\User\Entities\User;
use Illuminate\Contracts\View\View;

class FilterUserExport implements FromView, ShouldAutoSize, WithEvents
{
    /**
     * @return View
     */
    public function view(): View
    {
        $users = app(User::class)->newQuery();

        if ( request()->has('search') && !empty(request()->get('search')) ) {
            $search = request()->query('search');
            $users->where(function ($query) use($search) {
                $query->where('first_name', 'LIKE', "%{$search}%")
                    ->orWhere('last_name', 'LIKE', "%{$search}%")
                    ->orWhere('email', 'LIKE', "%{$search}%")
                    ->orWhere('mobile', 'LIKE', "%{$search}%");
            });
        }
        return view('users.index', compact('users'));
    }

    /**
     * @return array
     */
    public function registerEvents(): array
    {
        return [
            AfterSheet::class => function(AfterSheet $event) {
                $event->sheet->getDelegate()->setRightToLeft(true);
            },
        ];
    }
}

index.blade.php

@extends("admin-panel.layouts.master")
@section("content")
    <div class="content-body">
        <section class="grid-with-inline-row-label" id="grid-with-inline-row-label">

            <div class="row">
                <div class="col-12">
                    <div class="card">
                        <div class="card-header">
                            <h4 class="card-title">
                                <a data-action="collapse">
                                    <i class="ft-plus mr-1"></i>
                                    ثبت فیلتر
                                </a>
                            </h4>
                            <a class="heading-elements-toggle"><i class="ft-align-justify font-medium-3"></i></a>
                            <div class="heading-elements">
                                <ul class="list-inline mb-0">
                                    <li><a data-action="collapse"><i class="ft-plus"></i></a></li>
                                    <li><a data-action="reload"><i class="ft-rotate-cw"></i></a></li>
                                    <li><a data-action="expand"><i class="ft-maximize"></i></a></li>
                                    <li><a data-action="close"><i class="ft-x"></i></a></li>
                                </ul>
                            </div>
                        </div>
                        <div class="card-content collapse @if( $errors->any() ) show @endif">
                            <div class="card-body">
                                <form action="{!! route('admin::users.index') !!}" method="get">
                                    <div class="form-body">

                                        <div class="row">
                                            <div class="col-6 form-group">
                                                <label for="search">جستجو</label>
                                                <input type="text" name="search" id="search" class="form-control"
                                                       placeholder="جستجو..."
                                                       aria-label="جستجو" value="{{ request()->query('search') }}">
                                            </div>

                                            <div class="col-6 form-group">
                                                <label for="user_type">گروه کاربری</label>
                                                <select id="user_type" name="user_type" class="form-control">
                                                    <option value="" {{ (request()->query('user_type') == '')? "selected" : "" }}>-</option>
                                                    <option value="is_special" {{ (request()->query('user_type') == 'is_special')? "selected" : "" }}>کاربر ویژه</option>
                                                    <option value="is_user" {{ (request()->query('user_type') == 'is_user')? "selected" : "" }}>کاربر عادی</option>
                                                    <option value="is_admin" {{ (request()->query('user_type') == 'is_admin')? "selected" : "" }}>مدیریت سیستم</option>
                                                </select>
                                            </div>

                                            <div class="col-6 form-group">
                                                <label for="target">فیلتر کاربران</label>
                                                <select id="target" name="target" class="form-control">
                                                    <option value="" {{ (request()->query('target') == '')? "selected" : "" }}>-</option>
                                                    <option value="active" {{ (request()->query('target') == 'active')? "selected" : "" }}>کاربر ویژه</option>
                                                    <option value="orderedAtLeastOnce" {{ (request()->query('target') == 'orderedAtLeastOnce')? "selected" : "" }}>کاربر عادی</option>
                                                    <option value="orderedInLastMonth" {{ (request()->query('target') == 'orderedInLastMonth')? "selected" : "" }}>مدیریت سیستم</option>
                                                    <option value="neverOrdered" {{ (request()->query('target') == 'neverOrdered')? "selected" : "" }}>مدیریت سیستم</option>
                                                </select>
                                            </div>

                                            <div class="col-md-6 form-group">
                                                <label for="categoryId">دسته بندی</label>

                                                {!! Form::select('categoryId', \Modules\Category\Entities\Category::whereNull('parentId')->get()->pluck('title', 'id')->toArray(), null, [
                                                      'class' => 'form-control',
                                                      'id' => 'categoryId',
                                                      'placeholder' => 'انتخاب دسته بندی',
                                                  ]) !!}
                                            </div>
                                        </div>
                                        <div class="d-flex justify-content-between form-actions pb-0">
                                            <div>
                                                <button type="submit" class="btn btn-primary">ارسال <i class="ft-send position-right"></i>
                                                </button>
                                                <button type="reset" class="btn btn-warning">ریست <i class="ft-refresh-cw position-right"></i>
                                                </button>
                                            </div>
                                            <div>
                                                <a href="{!! route('admin::users.export-excel') !!}" class="btn btn-success">
                                                    <i class="la la-download"></i>
                                                    صادر
                                                </a>
                                                <a href="{!! route('admin::users.export-filter') !!}" class="btn btn-success">
                                                    <i class="la la-download"></i>
                                                    Export Filter
                                                </a>
                                                <a href="{!! route('admin::users.export-special-excel') !!}" class="btn btn-success">
                                                    <i class="la la-download"></i>
                                                    صدور کاربران ویژه
                                                </a>
                                                <a href="{!! route('admin::users.import-excel') !!}" class="btn btn-primary">
                                                    <i class="la la-cloud-download"></i>
                                                    آپلود
                                                </a>
                                            </div>
                                        </div>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="row">
                <div id="recent-transactions" class="col-xl-12 col-12">
                    <div class="card">
                        <div class="card-header">
                            <div class="row">
                                <div class="col-md">
                                    <div class="row justify-content-between align-items-center mr-md-1 mb-1">
                                        <div class="col-sm">
                                            <h4 class="card-title mb-2 mb-sm-0">فهرست کاربران</h4>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-auto">
                                    <a href="{!! route('admin::users.create') !!}" class="btn btn-info">
                                        <i class="la la-plus"></i>
                                        ایجاد کاربر جدید
                                    </a>
                                </div>

                            </div>
                        </div>
                        <div class="card-content">
                            @if( $users->count() > 0 )
                                @includeWhen( Module::find('notification') && request()->has('search'), 'user::admin.users._notification' )
                                <div class="table-responsive">
                                    <table id="recent-orders" class="table table-hover table-xl mb-0">
                                        <thead>
                                        <tr>
                                            <th class="border-top-0"># شناسه</th>
                                            <th class="border-top-0">نام و نام خانوادگی</th>
                                            <th class="border-top-0">موبایل</th>
                                            {{--                      <th class="border-top-0">ایمیل</th>--}}
                                            <th class="border-top-0">کد ملی</th>
                                            <th class="border-top-0">مدیر</th>
                                            <th class="border-top-0">وضعیت</th>
                                            <th class="border-top-0">ویژه</th>
                                            <th class="border-top-0">آخرین ورود</th>
                                            <th class="border-top-0">عملیات</th>
                                        </tr>
                                        </thead>
                                        <tbody>
                                        @foreach($users as $user)
                                            <tr>
                                                <td class="text-truncate">
                                                    <i class="la la-dot-circle-o success font-medium-1 mr-1"></i>
                                                    {{ $user->id }}
                                                </td>
                                                <td class="text-wrap">
                                                    {{ $user->first_name.' '.$user->last_name }}
                                                </td>
                                                <td class="text-wrap">
                                                    {{ $user->mobile }}
                                                </td>
                                                {{--<td class="text-wrap">
                                                  {{ $user->email }}
                                                </td>--}}
                                                <td class="text-wrap">
                                                    {{ $user->national_id }}
                                                </td>
                                                <td class="text-wrap">
                                                    @if( $user->is_admin )
                                                        <i class="ft-check-circle text-success"></i>
                                                    @else
                                                        <i class="ft-x-circle text-danger"></i>
                                                    @endif
                                                </td>
                                                <td class="text-wrap">
                                                    @if( !$user->disabled_at )
                                                        <i class="ft-check-circle text-success"></i>
                                                    @else
                                                        <i class="ft-x-circle text-danger"></i>
                                                    @endif
                                                </td>
                                                <td class="text-wrap">
                                                    @if( $user->is_special_user == 1 )
                                                        <i class="ft-check-circle text-success"></i>
                                                    @else
                                                        <i class="ft-x-circle text-danger"></i>
                                                    @endif
                                                </td>
                                                <td class="text-wrap">
                                                    @if( $user->last_login_at )
                                                        {{ getShamsiDate($user->last_login_at) }}
                                                    @else
                                                        —
                                                    @endif
                                                </td>
                                                <td>
                                                    <div class="row flex-nowrap">
                                                        <a href="{{ route('admin::users.show', $user) }}" class="mr-1">
                                                            <i class="ft-eye text-grey text-shadow-custom font-medium-5 font-weight-normal"></i>
                                                        </a>
                                                        <a href="{{ route('admin::users.edit', $user) }}" class="mr-1">
                                                            <i class="ft-edit text-grey text-shadow-custom font-medium-4 font-weight-normal"></i>
                                                        </a>

                                                        <form action="{{ route('admin::users.destroy', $user) }}"
                                                              method="post"
                                                              @submit.prevent="confirmDelete">
                                                            @method('delete')
                                                            @csrf
                                                            <button type="submit" class="btn btn-default p-0">
                                                                <i class="ft-trash-2 text-grey font-medium-5 font-weight-normal"></i>
                                                            </button>
                                                        </form>
                                                    </div>
                                                </td>
                                            </tr>
                                        @endforeach
                                        </tbody>
                                    </table>
                                    <div class="pagination-flat">
                                        {{ $users->links() }}
                                    </div>
                                </div>
                            @else
                                <div class="text-center my-2">
                                    <p>نتیجه‌ای برای نمایش وجود ندارد.</p>
                                </div>
                            @endif
                        </div>
                    </div>
                </div>
            </div>
        </section>
    </div>
@endsection

I get this error

The export submit button is sending everything to Excel. How do I make it to send only the filtered data. Thanks


回答1:


You need to get rid of the other HTML in your view such as forms, inputs, and buttons. Keep the view only to a minimum of the table that needed for your Excel.



来源:https://stackoverflow.com/questions/65636360/failed-to-load-excel-laravel-excel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!