如何在xlsxwriter类的循环中使用mysql?

时间:2018-05-02 07:27:24

标签: php mysql

我正在使用xlsxwriter,但对我来说没什么用,我尝试了十几件事来将mysql数据库行数据转移到excel行数据但没有任何效果:(

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

$filename = "PM.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(); 

                   $sql = "SELECT DATE_FORMAT(jobcard.Open_date_time,' %d-%b-%y') AS datee,vehicles_data.Frame_no, jobcard.Jobc_id,jobcard.serv_nature,jobcard.Customer_name,jobc_invoice.Lnet, jobc_invoice.Pnet, jobc_invoice.Snet, jobcard.Mileage,customer_data.cust_type,vehicles_data.model_year,jobcard.Veh_reg_no,jobcard.comp_appointed, customer_data.mobile,IF(variant_codes.Make IS NULL,'Others',variant_codes.Make) as make FROM `jobcard` LEFT OUTER JOIN jobc_invoice ON jobcard.Jobc_id=jobc_invoice.Jobc_id LEFT OUTER JOIN vehicles_data ON jobcard.Vehicle_id=vehicles_data.Vehicle_id LEFT OUTER JOIN variant_codes ON vehicles_data.Model=variant_codes.Model LEFT OUTER JOIN customer_data ON jobcard.Customer_id=customer_data.Customer_id ORDER BY `make` ASC";

                   $result=mysqli_query($conn,$sql) or die(mysqli_error($sql));
 while($rowz = mysqli_fetch_row($result))
                   {
                        $rows[] = $rowz;
                   }



$writer = new XLSXWriter();
$writer->setAuthor('Some Author'); 
foreach($rows as $row)
    $writer->writeSheetRow('Sheet1', $row);
$writer->writeToStdOut();

exit(0);

甚至试过这个,玩数组但没什么好吃的。

$row_excel=array();
$row_numb=0;
 $writer = new XLSXWriter();
$writer->setAuthor('Some Author');             
                   $result=mysqli_query($conn,$sql) or die(mysqli_error($sql));
 while($row = mysqli_fetch_row($result))
                   {
                       $row_excel[$row_numb]=$row;
                       $writer->writeSheetRow('Sheet1', $row_excel[$row_numb]);

$ row_numb ++;                        }

$writer->writeToStdOut();
exit(0);

3 个答案:

答案 0 :(得分:0)

试试这个:

Diff:

Diff:

答案 1 :(得分:0)

$data = array();
  $result=mysqli_query($conn,$sql) or die(mysqli_error($sql));

while ($row = mysqli_fetch_row($result)) {


echo "<br/>";
    for ($i = 0; $i < mysqli_num_fields($result); $i++) {
        $data[$i] = $row[$i];
        echo $row[$i];
    }

}

我尝试了这段代码,它向我展示了数据库中的数据。

答案 2 :(得分:0)

嘿,我想回答一个古老的问题,但如果遇到像@Rocky Rock和我这样的问题,这可能会对某人有所帮助。

此外,我还必须处理大量行,例如50,000至1,00,000。因此,我什至尝试了其他一些解决方案,例如将结果分块,并尝试导出到csv等中。

我也尝试通过强制下载头文件和$ writer-> writeToStdOut();进行所有操作。但是所有的逻辑都是徒劳的。

但是最终,经过一两天的努力,我将代码编码为“放弃”,相信我,它也可以在20秒内下载1,00万行。 这是我的代码,因此除了查询和文件名的会话变量外,您可以使用任何您喜欢的变量。我还要为我们的一位客户放置一些虚拟变量。

{"0":"<div class=\"col-sm-12 col-lg-6\">\r\n\r\nCaratteristiche principali:\r\n<ul>\r\n    <li>Sistema multimediale Toyota Touch\ufffd 2 with Go con display 8'' e telecamera posteriore<\/li>\r\n    <li>Sedile guidatore con supporto lombare regolabile elettricamente<\/li>\r\n    <li>Sedili anteriori riscaldabili<\/li>\r\n    <li>Toyota Safety Sense<\/li>\r\n<\/ul>\r\n<\/div>","sample_value":2}