1515use Omines \DataTablesBundle \Exporter \DataTableExporterInterface ;
1616use OpenSpout \Common \Entity \Row ;
1717use OpenSpout \Common \Entity \Style \Style ;
18+ use OpenSpout \Writer \AutoFilter ;
19+ use OpenSpout \Writer \XLSX \Entity \SheetView ;
1820use 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