Framework-agnostic fluent Excel, CSV, and ODS export builder for PHP applications.
SpreeCore Spreadsheet is a modern spreadsheet export library built on top of PhpSpreadsheet.
It provides a clean fluent API for generating professional spreadsheet reports without writing repetitive PhpSpreadsheet boilerplate.
Create reports with:
- Titles and subtitles
- Company logos
- Custom headers
- Nested/grouped headers
- Multiple worksheets
- Auto formatting
- Freeze panes
- Filters
- Number formats
- Images
- Custom PhpSpreadsheet styling
Works with:
- Laravel
- Symfony
- CodeIgniter
- Yii
- Lumen
- Plain PHP
- Any PHP framework
PhpSpreadsheet is powerful, but creating business reports usually requires many repetitive steps:
- Creating workbook
- Configuring worksheet
- Styling cells
- Managing merges
- Formatting columns
- Handling output responses
SpreeCore provides a fluent builder approach:
SpreeCore::make()
->headers([
'No',
'Name',
'Email',
'Department'
])
->rows($employees)
->download('employees.xlsx');Simple, readable, and maintainable.
✅ Excel export (.xlsx)
✅ CSV export (.csv)
✅ ODS export (.ods)
✅ Multiple worksheet support
✅ Raw binary output support
✅ Title ✅ Subtitle ✅ Description ✅ Logo support ✅ Header grouping ✅ Automatic merge cells ✅ Custom styling ✅ Column sizing
✅ Header styling ✅ Font customization ✅ Row height ✅ Text wrapping ✅ Alignment ✅ Border support ✅ Number formats
Supported formats:
- Currency
- Date
- DateTime
- Percentage
- Number
✅ Freeze panes ✅ Auto filter ✅ Multiple sheets ✅ Custom merge ✅ Cell images ✅ PhpSpreadsheet escape hatch
- PHP >= 8.0
- ext-gd (only required when embedding images/logos)
Install via Composer:
composer require mnurhad/spreedcoreuse SpreeCore\Spreadsheet\SpreeCore;
SpreeCore::make()
->setTitle('Employee Report')
->setSubtitle('January 2026')
->headers([
'No',
'Name',
'Email',
'Department'
])
->rows($employees)
->download('employees.xlsx');SpreeCore provides first-class Laravel integration.
Features:
- Service Provider
- Facade
- Auto discovery
- Publishable configuration
No manual registration required.
Example:
use SpreeCore\Spreadsheet\Facades\SpreeCore;
SpreeCore::make()
->headers([
'No',
'Name',
'Email'
])
->rows(Employee::all())
->download('employees.xlsx');Publish configuration:
php artisan vendor:publish --tag=spree-spreadsheet-configNo framework dependency required.
Example:
use SpreeCore\Spreadsheet\SpreeCore;
$content = SpreeCore::make()
->headers([
'No',
'Name',
'Email'
])
->rows($data)
->raw();The generated binary output can be returned using any framework response handler.
Simple header:
->headers([
'No',
'Name',
'Email'
])Grouped header:
->headers([
'No',
'Name',
'Contact' => [
'Email',
'Phone'
],
])Nested headers are automatically merged and formatted.
Supports:
- Array
- Generator
- Iterator
- Laravel Collection
- LazyCollection
- Cursor
Example:
->rows($employees)Generator example:
->rows(function () {
yield [
1,
'John Doe'
];
yield [
2,
'Jane Doe'
];
})->setTitle('Employee Report')
->setSubtitle('January 2026')
->setDescription('Generated automatically')The title area is automatically merged, centered, and formatted.
->withLogo(
public_path('logo.png')
)
->logoWidth(120)
->logoHeight(80)
->logoPosition('left')Supported sources:
->withLogo('/local/path/logo.png')
->withLogo('https://example.com/logo.png')
->withLogo('storage:s3::branding/logo.png')->withColorHeader('#0F4C81')
->headerFontSize(12)
->headerFontColor('#FFFFFF')
->headerBold()->rowHeight(20)
->font('Calibri')
->fontSize(11)
->alternateColor('#F5F5F5')
->wrapText()
->alignCenter()->freeze('A2')
->freezeHeader()
->freezeColumn('B')
->freezeRow(3)->filter()
->autoWidth()
->columnWidth([
'A' => 30,
'B' => 20
])SpreeCore::make()
->headers([
'Name'
])
->rows($employees)
->addSheet('Departments', function ($sheet) {
$sheet
->headers([
'Department'
]);
})
->download('report.xlsx');->download('report.xlsx');HTTP download response.
->stream('report.xlsx');Inline response.
->store($path);Save file.
->raw();Return binary content.
SpreeCore is designed with a layered architecture:
SpreeCore
├── Builder
│ └── Fluent API
├── Pipeline
│ └── Export stages
├── Exporter
│ └── XLSX / CSV / ODS
├── Output Handler
│ └── Download / Stream / Store
└── Laravel Adapter
└── ServiceProvider
└── Facade
The core package remains framework independent.
Install dependencies:
composer installRun tests:
vendor/bin/phpunitFuture improvements:
- Import Excel
- Queue export
- Large dataset streaming
- Progress tracking
- Password protection
- Watermark
- Barcode / QR Code
- Pivot table
- Charts
- Conditional formatting
- Formula support
- Template export
- Multi-language support
Contributions are welcome.
Please:
- Create a feature branch
- Add PHPUnit tests
- Submit a pull request
MIT License