mohd-arbaaz / laravel-excel-wrapper
A unified API for Excel imports and exports in Laravel, supporting both Maatwebsite/Excel and OpenSpout.
Installs: 9
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Forks: 0
pkg:composer/mohd-arbaaz/laravel-excel-wrapper
Requires
- php: ^8.2
- illuminate/filesystem: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
- illuminate/validation: ^11.0|^12.0
- maatwebsite/excel: ^3.1
- openspout/openspout: ^4.0
- spatie/laravel-data: ^4.0
Requires (Dev)
- maatwebsite/excel: ^3.1
- openspout/openspout: ^4.0
- orchestra/testbench: ^9.0|^10.0
- phpunit/phpunit: ^11.0
README
A unified API for Excel imports and exports in Laravel, supporting both Maatwebsite/Excel (rich features) and OpenSpout (high performance).
Features
- 🎯 Unified Column Definition - Define columns once using
ColumnDefdata objects - 🔄 Two Drivers - Choose between Maatwebsite/Excel (styling, formulas) or OpenSpout (speed, memory efficiency)
- ✅ Built-in Validation - Laravel validation rules integrated into imports
- 📊 Multi-Sheet Support - Export and import multiple sheets in a single file
- 🎨 Conditional Formatting - Color coding based on values (Maatwebsite only)
- 📦 Chunked Processing - Handle large files efficiently
- 🔧 Type Transformations - Automatic formatting for dates, booleans, amounts, etc.
Installation
composer require mohd-arbaaz/laravel-excel-wrapper
Then install at least one of the underlying drivers:
# For Laravel Excel (rich features, styling)
composer require maatwebsite/excel
# For OpenSpout (high performance, low memory)
composer require openspout/openspout
Publish Configuration (Optional)
php artisan vendor:publish --tag=excel-wrapper-config
Quick Start
Export Example
use ExcelWrapper\Abstracts\LaravelExcelExport;
use ExcelWrapper\Data\ColumnDef;
use Illuminate\Support\Collection;
class UsersExport extends LaravelExcelExport
{
public function columnConfig(): Collection
{
return collect([
ColumnDef::make('name', 'Full Name')->string()->width(25),
ColumnDef::make('email', 'Email Address')->string()->width(30),
ColumnDef::make('balance', 'Account Balance')
->amount()
->colored()
->width(15),
ColumnDef::make('created_at', 'Joined')
->date()
->width(15),
]);
}
public function collection(): ?Collection
{
return User::all();
}
}
// Usage
return (new UsersExport)->download('users.xlsx');
Import Example
use ExcelWrapper\Abstracts\LaravelExcelImport;
use ExcelWrapper\Data\ColumnDef;
use Illuminate\Support\Collection;
class UsersImport extends LaravelExcelImport
{
public function columnConfig(): Collection
{
return collect([
ColumnDef::make('name', 'Name')
->string()
->rules('required|string|max:255'),
ColumnDef::make('email', 'Email')
->string()
->rules('required|email|unique:users,email'),
ColumnDef::make('balance', 'Balance')
->amount()
->rules('nullable|numeric'),
]);
}
public function onRow(array $row): void
{
User::create($row);
}
}
// Usage
$result = (new UsersImport)->import('users.xlsx');
if ($result->hasErrors()) {
foreach ($result->errors as $error) {
echo "Row {$error['row']}: {$error['field']} - {$error['messages'][0]}";
}
}
Choosing a Driver
| Feature | Laravel Excel | OpenSpout |
|---|---|---|
| Styling | ✅ Full support | ❌ Limited |
| Conditional Formatting | ✅ Yes | ❌ No |
| Formulas | ✅ Yes | ✅ Basic |
| Memory Usage | Higher | ✅ Low |
| Speed (large files) | Slower | ✅ Fast |
| Multi-sheet | ✅ Yes | ✅ Yes |
Use Laravel Excel when:
- You need styling, conditional formatting, or complex formulas
- File sizes are moderate (< 50k rows)
- You need Excel-specific features
Use OpenSpout when:
- Processing large files (100k+ rows)
- Memory is constrained
- You don't need advanced styling
Switching Drivers
Simply change the base class - the columnConfig() and data methods remain the same:
// Laravel Excel
use ExcelWrapper\Abstracts\LaravelExcelExport;
class UsersExport extends LaravelExcelExport { ... }
// OpenSpout
use ExcelWrapper\Abstracts\OpenSpoutExport;
class UsersExport extends OpenSpoutExport { ... }
Documentation
- Getting Started
- Column Definitions
- Laravel Excel Guide
- OpenSpout Guide
- Multi-Sheet Operations
- Validation
Requirements
- PHP 8.2+
- Laravel 11+ or 12+
- spatie/laravel-data ^4.0
Driver Requirements:
- maatwebsite/excel ^3.1 (for Laravel Excel driver)
- openspout/openspout ^4.0 (for OpenSpout driver)
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security-related issues, please email arbaaz@example.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.