Skip to content
Advertisement

How Export only specific columns from Laravel Blade table view to Ecxel file?

So I have a table on blade view file, I have successfully exported it into the excel file. Now I want to export without exporting the ‘Actions” column. How can I do that?

I have attached my code and blade file below, it works perfectly. I just want to export everything except the Actions Column as it contains Buttons for Database Operations

THIS IS MY EXPORT CLASS CODE:

public function view(): View
{
    return view ('ims.view_inventory_history_table', [
        'data' => inbound_history::all()
        ]);
}

public function headings(): array
{
    return [
        'ID',
        'Warehouse',
        'SKU',
        'Child SKU',
        'Units',
        'Invoice No.',
        'Container No.',
        'Entry Date'
    ];}

/**
 * @return array
 */
public function registerEvents(): array
{
    return [
        AfterSheet::class    => function(AfterSheet $event) {
            $cellRange = 'A1:W1'; // All headers
            $event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);
        },
    ];
}}

THIS IS MY CONTROLLER FUNCTION:

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

THIS IS MY ROUTE:

Route::Get('inbound_history/export_view' ,'imsController@export_view')->name('inbound_history.export_view');

THIS IS MY BLADE TABLE VIEW:

<table id="datatables" class="table table-striped table-no-bordered table-hover" cellspacing="0" width="100%" style="width:100%">
<thead>
  <tr>
    <th style="width:5%">ID</th>
    <th>Warehouse</th>
    <th>SKU</th>
    <th>Child SKU</th>
    <th>Cases</th>
    <th>Units</th>
    <th>Invoice No.</th>
    <th>Container No.</th>
    <th>Entry Date</th>
    <th class="disabled-sorting text-right" style="width:12%">Actions</th>
  </tr>
</thead>
<tbody>
  @foreach ($data as $row)
  <tr>
    <td>{{$row['id']}}</td>
    <td>{{$row['warehouse']}}</td>
    <td>{{$row['sku_parent']}}</td>
    <td>{{$row['sku_child']}}</td>
    <td>{{$row['total_cases']}}</td>
    <td>{{$row['total_units']}}</td>
    <td>{{$row['invoice_no']}}</td>
    <td>{{$row['container_no']}}</td>
    <td>{{$row['date_rec']}}</td>
    <td class="td-actions text-right">
    {{-- <a rel="tooltip" class="btn btn-success btn-link" href="{{action('imsController@edit',$row['id'])}}">
          <i class="material-icons">edit</i></a> --}}
        
          <a rel="tooltip" class="btn btn-danger btn-link" href="{{action('imsController@destroy',$row['id'])}}" onclick = "if (! confirm('Confirm: Press OK to delete the Entry.')) { return false; }"style="color: red;">
            <i class="material-icons">close</i></a>
    </td>
  </tr>
  @endforeach
</tbody>

Advertisement

Answer

I don’t know if I got everything correctly, but why don’t you do something like this:

Pass an additional variable to your blade template like $isView, when you want to create a view for the user.

And in your blade.php template you do something like this:

@isset($isView)
<th class="disabled-sorting text-right" style="width:12%">Actions</th>
@endisset
// do the same @isset test for the corresponding <td> element

When you want to render it to excel you just don’t pass this variable and the column is not rendered.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement