I am facing problem in export excel using spout library. I don't know where is the issue in my code. I don't know much about spout library. I have tried many times but the same error occurs again and again. Please guide me where is the issue.
Code:
<?php
include('php_script/db.php');
use Box\Spout\Common\Type;
use Box\Spout\Writer\Style\Border;
use Box\Spout\Writer\Style\BorderBuilder;
use Box\Spout\Writer\Style\Color;
use Box\Spout\Writer\Style\StyleBuilder;
use Box\Spout\Writer\WriterFactory;
include('php_script/spout/src/Spout/Autoloader/autoload.php');
$sql = mysqli_query($con,"select * from person ");
$border = (new BorderBuilder())
->setBorderBottom(Color::GREEN, Border::WIDTH_THIN, Border::STYLE_DASHED)
//->setFontColor(Color::BLUE)
//->setBackgroundColor(Color::YELLOW)
->build();
$style = (new StyleBuilder())
->setBorder($border)
->build();
$filePath = "person".date("Y-m-d-H-i-s").'.xlsx';
$writer = WriterFactory::create(Type::XLSX);
$writer->openToFile($filePath);
$array = ['TYPE'];
$writer->addRowWithStyle($array, $style);
while( $rows = mysqli_fetch_assoc($sql)) {
$Type_subsidiary = $rows['Type_subsidiary'];
$data = [$Type_subsidiary];
$writer->addRow($data);
}
$writer->close();
if (file_exists($filePath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filePath).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filePath));
readfile($filePath);
exit;
}
?>
Error:
Excel cannot open the file 'person2018-09-19-07-20-30.xlsx' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file
have you tried to let spout create and "send" the file directly to browser without specifying headers as specified in their doc http://opensource.box.com/spout/getting-started/ ?
Hope this helps, in our applications (based on Symfony), we use spout but no need to specify headers and filepath.