PHP code example of davidannebicque / html-to-spreadsheet-bundle

1. Go to this page and download the library: Download davidannebicque/html-to-spreadsheet-bundle library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

davidannebicque / html-to-spreadsheet-bundle example snippets


// XLSX (default)
return $factory->streamWorkbook($workbook, 'export.xlsx');
// or explicitly
return $factory->streamWorkbook($workbook, 'export', 'xlsx');

// CSV (exports first sheet only)
return $factory->streamWorkbook($workbook, 'export', 'csv');

// ODS (OpenDocument - LibreOffice compatible)
return $factory->streamWorkbook($workbook, 'export', 'ods');



namespace App\Controller;

use Davidannebicque\HtmlToSpreadsheetBundle\Controller\SpreadsheetTrait;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

final class ReportController extends AbstractController
{
    use SpreadsheetTrait;

    #[Route('/export', name: 'app_export')]
    public function export(): Response
    {
        $data = [
            ['name' => 'John Doe', 'amount' => 1234.56, 'date' => new \DateTime('2024-02-01')],
            ['name' => 'Anna Smith', 'amount' => 987.45, 'date' => new \DateTime('2024-02-02')],
        ];

        // One-liner: render template + convert + stream
        return $this->renderSpreadsheet(
            'reports/export.html.twig',
            ['lines' => $data],
            'export.xlsx'
        );
    }
}



namespace App\Controller;

use Davidannebicque\HtmlToSpreadsheetBundle\Html\HtmlTableInterpreter;
use Davidannebicque\HtmlToSpreadsheetBundle\Html\HtmlToXlsxOptions;
use Davidannebicque\HtmlToSpreadsheetBundle\Spreadsheet\Response\ExcelResponseFactory;
use Davidannebicque\HtmlToSpreadsheetBundle\Spreadsheet\SpreadsheetRenderer;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Twig\Environment;

final class AdvancedController extends AbstractController
{
    #[Route('/export-advanced', name: 'app_export_advanced')]
    public function exportWithRenderer(SpreadsheetRenderer $renderer): Response
    {
        $data = [
            ['nom' => 'Doe', 'prenom' => 'John', 'montant' => 1234.56, 'date' => new \DateTime('2024-02-01')],
            ['nom' => 'Smith', 'prenom' => 'Anna', 'montant' => 987.45, 'date' => new \DateTime('2024-02-02')],
        ];

        // Using the renderer service
        return $renderer->renderFromTemplate(
            'demo/index.html.twig',
            ['lignes' => $data],
            'export-test.xlsx'
        );
    }

    #[Route('/export-manual', name: 'app_export_manual')]
    public function exportManual(
        Environment $twig,
        HtmlTableInterpreter $interpreter,
        ExcelResponseFactory $factory
    ): Response {
        $lines = [
            ['nom' => 'Doe', 'prenom' => 'John', 'montant' => 1234.56, 'date' => new \DateTime('2024-02-01')],
            ['nom' => 'Smith', 'prenom' => 'Anna', 'montant' => 987.45, 'date' => new \DateTime('2024-02-02')],
            ['nom' => 'Lemaire', 'prenom' => 'Lucie', 'montant' => 150.00, 'date' => new \DateTime('2024-02-03')],
        ];

        // 1) Render HTML template
        $html = $twig->render('demo/index.html.twig', ['lignes' => $lines]);

        // 2) Convert to Spreadsheet
        $workbook = $interpreter->fromHtml(
            $html,
            new HtmlToXlsxOptions(strict: true)
        );

        // 3) Stream as file download
        return $factory->streamWorkbook($workbook, 'export-test.xlsx');
    }

    #[Route('/create-workbook', name: 'app_create_workbook')]
    public function createWorkbook(SpreadsheetRenderer $renderer): Response
    {
        // Get the workbook object without streaming (for further manipulation)
        $workbook = $renderer->createFromTemplate(
            'demo/index.html.twig',
            ['lignes' => [/* data */]]
        );

        // Manipulate the workbook...
        $workbook->getActiveSheet()->getCell('A1')->setValue('Modified');

        // Then stream it manually
        $factory = new ExcelResponseFactory();
        return $factory->streamWorkbook($workbook, 'custom.xlsx');
    }
}

// XLSX (default)
return $this->renderSpreadsheet('template.html.twig', $data, 'export.xlsx');

// ODS (LibreOffice)
return $this->renderSpreadsheet('template.html.twig', $data, 'export.ods');

// CSV (first sheet only)
return $this->renderSpreadsheet('template.html.twig', $data, 'export.csv');