Расширение файла или файл недействителен во время экспорта в Excel с использованием библиотеки spout в php - PullRequest
0 голосов
/ 19 сентября 2018
<?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;
        }

?>

enter image description here У меня проблема с экспортом в Excel с использованием библиотеки носика.Я не знаю, где проблема в моем коде.Я не знаю много о библиотеке носика.Я пробовал много раз, но одна и та же ошибка возникает снова и снова.Пожалуйста, направьте меня, где проблема.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы пытались разрешить spout создавать и «отправлять» файл напрямую в браузер, не указывая заголовки, как указано в их документе http://opensource.box.com/spout/getting-started/?

$writer->openToBrowser($fileName); // stream data directly to the browser

Надеюсь, это поможет в наших приложениях(на основе Symfony), мы используем spout, но не нужно указывать заголовки и путь к файлу.

...