Как использовать цикл mysql с php xlsxwriter для экспорта в лист Excel в PHP

Я пытаюсь создать цикл запросов mysql, чтобы реализовать его в xlsxwriter php excel exporter, но мне трудно заставить его работать, он генерирует лист Excel, но говорит, что он поврежден и не работает.

Это исходный файл исходного кода:

<?php
include_once("xlsxwriter.class.php");
ini_set('display_errors', 0);
ini_set('log_errors', 1);
error_reporting(E_ALL & ~E_NOTICE);

$filename = "example.xlsx";
header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');

$rows = array(
    array('test','1','-50.5','2010-01-01 23:00:00','2012-12-31 23:00:00'),
    array('2003','=B1', '23.5','2010-01-01 00:00:00','2012-12-31 00:00:00'),
);

$writer = new XLSXWriter();
$writer->setAuthor('Some Author'); 
foreach($rows as $row)
    $writer->writeSheetRow('Sheet1', $row);
$writer->writeToStdOut();
//$writer->writeToFile('example.xlsx');
//echo $writer->writeToString();
exit(0);

И это код, который я создал, и вы заметите, что в строке "WriteSheetRow" я сделал несколько фиктивных данных, просто чтобы проверить, работает ли он, а это не так!:

<?php
include "session.php";
include_once("files/excel/xlsxwriter.class.php");
ini_set('display_errors', 0);
ini_set('log_errors', 1);
error_reporting(E_ALL & ~E_NOTICE);

$filename = "example.xlsx";
header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');

$writer = new XLSXWriter();

//define column headers
$headers = array('Product Id' => 'integer', 'Price' => 'price', 'Sale Price' => 'price', 'Sales Count' => 'integer', 'Sale Date' => 'string');
//write headers
$writer->writeSheetHeader('Sheet1', $headers);

            $sql = "SELECT * FROM customeracct WHERE tourid=1005 AND status=1";
            $result = $db->query($sql);
            if ($result->num_rows > 0) { while($customeracct = $result->fetch_assoc()) { 

                $contactid = $customeracct["contactid"];
                $contactsql = "SELECT * FROM contacts WHERE id=$contactid";
                $contactresult = $db->query($contactsql);
                $contactcustomer = $contactresult->fetch_assoc();

                //write rows to sheet1
                $writer->writeSheetRow('Sheet1',array('test','1','-50.5','2010-01-01 23:00:00','2012-12-31 23:00:00'));
            }}


$writer->setAuthor('Good Shepherd Travels'); 
exit(0);

Не могли бы вы помочь мне проверить, правильно ли это, или есть ли лучший способ сделать это? Я попытался сделать цикл внутри массива, но он не работает, чтобы иметь условный код php внутри массива.

Спасибо.

2 ответа

Попробовав несколько методов с помощью xlsxwriter, и попытавшись настроить ответ на этот вопрос: как экспортировать xlsx из mysql с помощью php xlsxwriter

Мне удалось найти решение для моей проблемы, и это код для людей, которые сталкиваются с подобной проблемой, как я, и, надеюсь, это принесет им пользу:

<?php
include "session.php";
include_once("files/excel/xlsxwriter.class.php");
ini_set('display_errors', 0);
ini_set('log_errors', 1);
error_reporting(E_ALL & ~E_NOTICE);

    $filename = "example.xlsx";
    header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
    header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    header('Content-Transfer-Encoding: binary');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');   
    $query="SELECT * FROM customeracct WHERE tourid=1005 AND status=1";
    $result = $db->query($query); 
    //$rows = $result->fetch_assoc(); 
    $header = array(
      'ID'=>'integer',
      'Subject'=>'string',
      'Content'=>'string',
    );
    $writer = new XLSXWriter();
    $writer->writeSheetHeader('Sheet1', $header);
    $array = array();
    while ($row=$result->fetch_assoc())
    {
        $array[1] = $row['contactid'];
        $array[2] = $row['tourid'];
        $array[3] = $row['status'];
        $writer->writeSheetRow('Sheet1', $array);
    };

    //$writer->writeSheet($array,'Sheet1', $header);//or write the whole sheet in 1 call    

    $writer->writeToStdOut();
    //$writer->writeToFile('example.xlsx');
    //echo $writer->writeToString();
    exit(0);

Эта ссылка может быть полезной. Есть много способов сделать это. просто искать в Google.

https://www.sitepoint.com/generate-excel-files-charts-phpexcel/

Другие вопросы по тегам