mnurhad/spreedcore

Framework-agnostic fluent Excel/CSV/ODS export builder on top of PhpSpreadsheet, with first-class Laravel support.

Maintainers

Package info

github.com/MNurHad/spreedcore

pkg:composer/mnurhad/spreedcore

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-08-05 08:46 UTC

This package is auto-updated.

Last update: 2026-08-05 10:05:43 UTC


README

Latest Version Downloads PHP Version License

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

Why SpreeCore?

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.

Features

Spreadsheet Export

✅ Excel export (.xlsx) ✅ CSV export (.csv) ✅ ODS export (.ods) ✅ Multiple worksheet support ✅ Raw binary output support

Report Builder

✅ Title ✅ Subtitle ✅ Description ✅ Logo support ✅ Header grouping ✅ Automatic merge cells ✅ Custom styling ✅ Column sizing

Formatting

✅ Header styling ✅ Font customization ✅ Row height ✅ Text wrapping ✅ Alignment ✅ Border support ✅ Number formats

Supported formats:

  • Currency
  • Date
  • DateTime
  • Percentage
  • Number

Worksheet Features

✅ Freeze panes ✅ Auto filter ✅ Multiple sheets ✅ Custom merge ✅ Cell images ✅ PhpSpreadsheet escape hatch

Requirements

  • PHP >= 8.0
  • ext-gd (only required when embedding images/logos)

Installation

Install via Composer:

composer require mnurhad/spreedcore

Quick Example

use SpreeCore\Spreadsheet\SpreeCore;

SpreeCore::make()
    ->setTitle('Employee Report')
    ->setSubtitle('January 2026')
    ->headers([
        'No',
        'Name',
        'Email',
        'Department'
    ])
    ->rows($employees)
    ->download('employees.xlsx');

Laravel Support

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-config

Plain PHP / Other Frameworks

No 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.

Headers

Simple header:

->headers([
    'No',
    'Name',
    'Email'
])

Grouped header:

->headers([
    'No',
    'Name',
    'Contact' => [
        'Email',
        'Phone'
    ],
])

Nested headers are automatically merged and formatted.

Rows

Supports:

  • Array
  • Generator
  • Iterator
  • Laravel Collection
  • LazyCollection
  • Cursor

Example:

->rows($employees)

Generator example:

->rows(function () {

    yield [
        1,
        'John Doe'
    ];

    yield [
        2,
        'Jane Doe'
    ];

})

Title, Subtitle, Description

->setTitle('Employee Report')
->setSubtitle('January 2026')
->setDescription('Generated automatically')

The title area is automatically merged, centered, and formatted.

Logo

->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')

Header Styling

->withColorHeader('#0F4C81')
->headerFontSize(12)
->headerFontColor('#FFFFFF')
->headerBold()

Body Styling

->rowHeight(20)

->font('Calibri')

->fontSize(11)

->alternateColor('#F5F5F5')

->wrapText()

->alignCenter()

Freeze Pane

->freeze('A2')

->freezeHeader()

->freezeColumn('B')

->freezeRow(3)

Filter and Column

->filter()

->autoWidth()

->columnWidth([
    'A' => 30,
    'B' => 20
])

Multiple Sheets

SpreeCore::make()

    ->headers([
        'Name'
    ])

    ->rows($employees)

    ->addSheet('Departments', function ($sheet) {

        $sheet
            ->headers([
                'Department'
            ]);

    })

    ->download('report.xlsx');

Output Methods

->download('report.xlsx');

HTTP download response.

->stream('report.xlsx');

Inline response.

->store($path);

Save file.

->raw();

Return binary content.

Architecture

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.

Testing

Install dependencies:

composer install

Run tests:

vendor/bin/phpunit

Roadmap

Future 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

Contributing

Contributions are welcome.

Please:

  1. Create a feature branch
  2. Add PHPUnit tests
  3. Submit a pull request

License

MIT License