Skip to content

Commit 66cd1e3

Browse files
authored
Modify Excel OpenSpout exporter (#333)
Add AutoFilter and freeze row, change column width
1 parent 879898d commit 66cd1e3

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

src/Exporter/Excel/ExcelOpenSpoutExporter.php

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
use Omines\DataTablesBundle\Exporter\DataTableExporterInterface;
1616
use OpenSpout\Common\Entity\Row;
1717
use OpenSpout\Common\Entity\Style\Style;
18+
use OpenSpout\Writer\AutoFilter;
19+
use OpenSpout\Writer\XLSX\Entity\SheetView;
1820
use OpenSpout\Writer\XLSX\Writer;
1921

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

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

32-
// Write header
33-
$boldStyle = (new Style())->setFontBold();
34-
$writer->addRow(Row::fromValues($columnNames, $boldStyle));
35-
36-
// Write data
34+
// Data
3735
foreach ($data as $row) {
3836
// Remove HTML tags
3937
$values = array_map('strip_tags', $row);
40-
41-
$writer->addRow(Row::fromValues($values));
38+
$rows[] = Row::fromValues($values);
4239
}
4340

41+
// Write rows
42+
$writer = new Writer();
43+
$writer->openToFile($filePath);
44+
$writer->addRows($rows);
45+
46+
// Sheet configuration (AutoFilter, freeze row, better column width)
47+
$sheet = $writer->getCurrentSheet();
48+
$sheet->setAutoFilter(new AutoFilter(0, 1,
49+
max(count($columnNames) - 1, 0), max(count($rows), 1)));
50+
$sheet->setSheetView((new SheetView())->setFreezeRow(2));
51+
$sheet->setColumnWidthForRange(24, 1, max(count($columnNames), 1));
52+
4453
$writer->close();
4554

4655
return new \SplFileInfo($filePath);

0 commit comments

Comments
 (0)