Laravel.io
<?php
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;


class Excel {

    private $root;
    private $view;
    private $export;

    public function __construct()
    {
        $this->root = $_SERVER['DOCUMENT_ROOT'];
        $this->view = $this->root.DIRECTORY_SEPARATOR.'application'.DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.'excel'.DIRECTORY_SEPARATOR;
        $this->export = $this->root.DIRECTORY_SEPARATOR.'assets'.DIRECTORY_SEPARATOR.'upload'.DIRECTORY_SEPARATOR.'excel'.DIRECTORY_SEPARATOR;
    }

    public function create()
    {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Hello World !');

        $writer = new Xlsx($spreadsheet);
        $writer->save($_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.'hello world.xlsx');
    }

    public function createFromTemplate($filename, $template, $data, $format = 'Xls', $output = 'save')
    {
        $spreadsheet = IOFactory::load($this->view.$template.'.xlsx');

        $worksheet = $spreadsheet->getActiveSheet();

        if(!empty($data))
        {
            foreach ($data as $key => $value)
            {
                $worksheet->getCell($key)->setValue($value);
            }
        }

        $mime = $format == 'Xls' ? 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'application/pdf';
        $ext = $format == 'Xls' ? '.xlsx' : '.pdf';
        $writer = $format == 'Xls' ? new Xlsx($spreadsheet) : new Mpdf($spreadsheet);

        if($output == 'save')
            $writer->save($this->export.$filename.$ext);
        else
        {
            header('Content-Type: '.$mime);
            header('Content-Disposition: attachment; filename="'.$filename.$ext.'"');
            $writer->save("php://output");
        }
    }
}

Please note that all pasted data is publicly available.