Skip to content

Instantly share code, notes, and snippets.

@faiyazalam
Created December 8, 2023 11:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save faiyazalam/0fee1cd4c6108b6cc889a7669c58884b to your computer and use it in GitHub Desktop.
Save faiyazalam/0fee1cd4c6108b6cc889a7669c58884b to your computer and use it in GitHub Desktop.
sample script to download excel file in pimcore
<?php
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$page = 1;
$limit = 100;
$sql = "TODO";
$sql .= " LIMIT $limit OFFSET ";
$db = \Pimcore\Db::get();
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$isHeaderSet = false;
$isEmptyExcel = true;
do {
$query = $sql . (($page - 1) * $limit);
$results = $db->fetchAllAssociative($query);
if (empty($results)) {
break;
}
$isEmptyExcel = false;
if (!$isHeaderSet) {
$column = 'A';
foreach (array_keys($results[0]) as $header) {
$sheet->setCellValue($column . '1', $header);
$column++;
}
$headerRange = 'A1:' . $column . '1';
$style = $sheet->getStyle($headerRange);
$font = $style->getFont();
$font->setBold(true);
$isHeaderSet = true;
}
$row = 2;
foreach ($results as $result) {
$column = 'A';
foreach ($result as $value) {
$sheet->setCellValue($column . $row, $value);
$column++;
}
$row++;
}
$page++;
} while (true);
if ($isEmptyExcel) {
$sheet->setCellValue('A1', 'No records found!');
} else {
$sheet->getColumnDimension('A')->setAutoSize(true);
$lastColumn = $sheet->getHighestColumn();
for ($col = 'B'; $col <= $lastColumn; $col++) {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
}
$assetsDirectory = PIMCORE_WEB_ROOT . '/var/tmp';
$excelFilePath = $assetsDirectory . "/test.xlsx";
$writer = new Xlsx($spreadsheet);
$writer->save($excelFilePath);
return $this->respondWithSuccess('File generated!', [
'redirectUrl' => $this->generateUrl('routename', [
'filename' => $filename,
'token' => $data['token_download']
])
]);
@faiyazalam
Copy link
Author

sample code to download file:
public function indexAction(Request $request) { $response = new Response(file_get_contents($filePath)); $response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); $response->headers->set('Content-Disposition', "attachment; filename=$name"); return $response; }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment