Export Options
This guide covers advanced customization options for exports including export types, sheet names, and column formatting.
Export Types
You can set the export file type using the type property. Available options are xlsx (Excel) and csv. The default is xlsx.
Via Livewire Component
{{-- Excel export (default) --}}<livewire:export-button :table-id="$dataTable->getTableId()" type="xlsx" /> {{-- CSV export --}}<livewire:export-button :table-id="$dataTable->getTableId()" type="csv" />
Excel Sheet Name
Via Component Property
Set the Excel sheet name using the sheet-name property:
<livewire:export-button :table-id="$dataTable->getTableId()" sheet-name="Monthly Report" />
Via DataTable Method Override
For a more permanent solution, override the sheetName() method in your DataTable class:
<?php namespace App\DataTables; use App\Models\User;use Yajra\DataTables\Services\DataTable;use Yajra\DataTables\WithExportQueue; class UsersDataTable extends DataTable{ use WithExportQueue; /** * Customize the Excel sheet name. * Note: Excel sheet names have a 31 character limit. */ protected function sheetName(): string { return 'Yearly Report'; } // ... rest of your DataTable methods}
Column Formatting
You can customize how columns are formatted in exports using the exportFormat() method in your column definitions.
Text Format (Preserve Leading Zeroes)
Use text format for IDs, phone numbers, or any value where leading zeroes should be preserved:
Column::make('id'), // Text format for IDColumn::make('mobile')->exportFormat('00000000000'),Column::make('phone')->exportFormat(NumberFormat::FORMAT_TEXT),
Numeric Fields Formatting
Numeric columns can be formatted with custom decimal places and thousand separators:
Column::make('price')->exportFormat('0.00'),Column::make('count')->exportFormat('#,##0'),Column::make('average')->exportFormat('#,##0.00'),Column::make('percentage')->exportFormat('0.00%'),Column::make('currency')->exportFormat('$#,##0.00'),
Date Fields Formatting
Date columns can be formatted using standard Excel date formats:
// Simple date formatColumn::make('report_date')->exportFormat('mm/dd/yyyy'), // Date and timeColumn::make('created_at')->exportFormat(NumberFormat::FORMAT_DATE_DATETIME), // Other common formatsColumn::make('start_date')->exportFormat(NumberFormat::FORMAT_DATE_YYYYMMDD),Column::make('end_date')->exportFormat(NumberFormat::FORMAT_DATE_DDMMYYYY),
Valid Date Formats
The following date formats are supported for auto-detection:
'date_formats' => [ 'mm/dd/yyyy', // Standard Excel formats NumberFormat::FORMAT_DATE_DATETIME, NumberFormat::FORMAT_DATE_YYYYMMDD, NumberFormat::FORMAT_DATE_XLSX22, NumberFormat::FORMAT_DATE_DDMMYYYY, NumberFormat::FORMAT_DATE_DMMINUS, NumberFormat::FORMAT_DATE_DMYMINUS, NumberFormat::FORMAT_DATE_DMYSLASH, NumberFormat::FORMAT_DATE_MYMINUS, // Time formats NumberFormat::FORMAT_DATE_TIME1, NumberFormat::FORMAT_DATE_TIME2, NumberFormat::FORMAT_DATE_TIME3, NumberFormat::FORMAT_DATE_TIME4, NumberFormat::FORMAT_DATE_TIME5, NumberFormat::FORMAT_DATE_TIME6, NumberFormat::FORMAT_DATE_TIME7, // Legacy Excel formats NumberFormat::FORMAT_DATE_XLSX14, NumberFormat::FORMAT_DATE_XLSX15, NumberFormat::FORMAT_DATE_XLSX16, NumberFormat::FORMAT_DATE_XLSX17, NumberFormat::FORMAT_DATE_YYYYMMDD2, NumberFormat::FORMAT_DATE_YYYYMMDDSLASH,]
Force Text Format for Numeric Values
To ensure numeric-looking values are treated as text (useful for IDs, codes, etc.):
// Using text formatColumn::make('sku')->exportFormat('@'),Column::make('product_code')->exportFormat(NumberFormat::FORMAT_GENERAL),Column::make('account_number')->exportFormat(NumberFormat::FORMAT_TEXT),
Custom Export Rendering
You can provide a custom callback for exporting specific column values:
Column::make('status') ->exportRender(fn ($model, $value) => ucfirst($value)),
Complete Example
Here's a comprehensive example showing multiple formatting options:
<?php namespace App\DataTables; use App\Models\Order;use Yajra\DataTables\Html\Column;use Yajra\DataTables\Services\DataTable;use Yajra\DataTables\WithExportQueue;use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class OrdersDataTable extends DataTable{ use WithExportQueue; protected function sheetName(): string { return 'Orders Report'; } protected function getColumns(): array { return [ Column::make('order_number')->exportFormat('@'), Column::make('customer_name'), Column::make('total')->exportFormat('$#,##0.00'), Column::make('quantity')->exportFormat('#,##0'), Column::make('order_date')->exportFormat('mm/dd/yyyy'), Column::make('created_at')->exportFormat(NumberFormat::FORMAT_DATE_DATETIME), Column::make('status') ->exportRender(fn ($model, $value) => ucfirst($value)), Column::make('id'), ]; }}
Configuration Reference
These options can be configured globally in config/datatables-export.php:
return [ // Default date format when no specific format is set 'default_date_format' => 'yyyy-mm-dd', // Auto-detect date fields using these formats 'date_formats' => [ 'mm/dd/yyyy', NumberFormat::FORMAT_DATE_DATETIME, // ... other formats ], // Treat values with these formats as text 'text_formats' => [ NumberFormat::FORMAT_TEXT, NumberFormat::FORMAT_GENERAL, ],];
Related Documentation
- Installation - Initial setup
- Export Usage - Basic usage guide
- Export Columns - Configure export-specific columns