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