Как использовать цикл mysql с php xlsxwriter для экспорта в лист Excel в PHP - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь создать цикл запросов 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 ]

0 голосов
/ 22 октября 2018

После нескольких попыток использования 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);
0 голосов
/ 22 октября 2018

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

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

...