Skip to content

Commit

Permalink
Modify Excel OpenSpout exporter (#333)
Browse files Browse the repository at this point in the history
Add AutoFilter and freeze row, change column width
  • Loading branch information
mhvis committed Mar 21, 2024
1 parent 879898d commit 66cd1e3
Showing 1 changed file with 18 additions and 9 deletions.
27 changes: 18 additions & 9 deletions src/Exporter/Excel/ExcelOpenSpoutExporter.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
use Omines\DataTablesBundle\Exporter\DataTableExporterInterface;
use OpenSpout\Common\Entity\Row;
use OpenSpout\Common\Entity\Style\Style;
use OpenSpout\Writer\AutoFilter;
use OpenSpout\Writer\XLSX\Entity\SheetView;
use OpenSpout\Writer\XLSX\Writer;

/**
Expand All @@ -26,21 +28,28 @@ public function export(array $columnNames, \Iterator $data): \SplFileInfo
{
$filePath = sys_get_temp_dir() . '/' . uniqid('dt') . '.xlsx';

$writer = new Writer();
$writer->openToFile($filePath);
// Header
$rows = [Row::fromValues($columnNames, (new Style())->setFontBold())];

// Write header
$boldStyle = (new Style())->setFontBold();
$writer->addRow(Row::fromValues($columnNames, $boldStyle));

// Write data
// Data
foreach ($data as $row) {
// Remove HTML tags
$values = array_map('strip_tags', $row);

$writer->addRow(Row::fromValues($values));
$rows[] = Row::fromValues($values);
}

// Write rows
$writer = new Writer();
$writer->openToFile($filePath);
$writer->addRows($rows);

// Sheet configuration (AutoFilter, freeze row, better column width)
$sheet = $writer->getCurrentSheet();
$sheet->setAutoFilter(new AutoFilter(0, 1,
max(count($columnNames) - 1, 0), max(count($rows), 1)));
$sheet->setSheetView((new SheetView())->setFreezeRow(2));
$sheet->setColumnWidthForRange(24, 1, max(count($columnNames), 1));

$writer->close();

return new \SplFileInfo($filePath);
Expand Down

0 comments on commit 66cd1e3

Please sign in to comment.