J'utilise PhpSpreadsheet pour générer un fichier Excel dans Symfony 4. Mon code est:
$spreadsheet = $this->generateExcel($content);
$writer = new Xlsx($spreadsheet);
$filename = "myFile.xlsx";
$writer->save($filename); // LINE I WANT TO AVOID
$response = new BinaryFileResponse($filename);
$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$filename
);
Mais je ne veux pas enregistrer le fichier, puis le lire pour revenir à l'utilisateur. Je souhaite télécharger directement du contenu Excel. Y a-t-il un moyen de le faire?
J'ai cherché à générer un flux de contenu (comme cette réponse dit) mais je n'ai pas réussi.
Merci d'avance et désolé pour mon anglais
Si je comprends bien, vous générez le contenu de votre code. Vous pouvez diffuser la réponse dans Symfony et configurer PhpSpreadsheet Writer pour enregistrer dans 'php: // output' (voir ici le document officiel Rediriger la sortie vers le navigateur Web d'un client ).
Voici un exemple de travail utilisant Symfony 4.1 et Phpspreadsheet 1.3:
<?php
namespace App\Controller;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use PhpOffice\PhpSpreadsheet\Writer as Writer;
class TestController extends Controller
{
/**
* @Route("/save")
*/
public function index()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$writer = new Writer\Xls($spreadsheet);
$response = new StreamedResponse(
function () use ($writer) {
$writer->save('php://output');
}
);
$response->headers->set('Content-Type', 'application/vnd.ms-Excel');
$response->headers->set('Content-Disposition', 'attachment;filename="ExportScan.xls"');
$response->headers->set('Cache-Control','max-age=0');
return $response;
}
}