Я использую 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);
Да, я проверяю, что запрос работает нормально, но проблема с созданием кода, это Excel не может открыть файл, потому что расширение файла недействительно или файл поврежден.
Что вместо этого содержится в файле? Вы пробовали открыть его с помощью Блокнота?
нет, сэр, я сейчас проверю
он показывает какой-то нечитаемый текст, файл 65 КБ.
попробуй это:
while ($row = mysqli_fetch_row($result)) {
$data = array();
for ($i = 0; $i < mysqli_num_fields($result); $i++) {
$data[$i] = $row[$i];
}
$writer->writeSheetRow('Sheet1', $data);
}
$writer->writeToStdOut();
exit(0);
Спасибо за ваше время, я пробовал, но файл Excel по-прежнему не открывается, а блокнот пуст.
Думаю, проблема в ваших данных. Можете ли вы показать нам результат, если напечатаете строку $ row?
Да, верно, я забыл связать запрос с переменной $ result. теперь блокнот показывает нечитаемый текст размером 65 КБ, но Excel по-прежнему говорит о своем прерванном файле и не отображает в нем данные :(
даже пробовал это ... $ writer-> writeSheetRow ('Sheet1', $ data [$ i]); но по-прежнему показывает, что файл прерван.
Возможно, в ваших данных есть специальные символы, которые могут вызвать ошибку в функции writeCell в xlsxwriter.
$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];
}
}
Я попробовал этот код, и он показывает мне данные из базы данных.
Привет, я даю ответ на немного старый вопрос, но это может помочь кому-то, если у меня такая же проблема, как у @Rocky Rock и у меня.
Кроме того, мне приходится обрабатывать большое количество строк, например от 50 000 до 100 000. Поэтому я даже попробовал некоторые другие решения, такие как фрагмент моего результата, попытался экспортировать в CSV и т. д. И т. Д.
Я также пробовал все с принудительной загрузкой с заголовком и $ writer-> writeToStdOut (); но всякая логика напрасна.
Но, в конце концов, после дня или двух работ я закодировал как отдать и избавиться от всего, поверьте мне, он также может загрузить 100 000 строк всего за 20 секунд. Это мой код, поэтому вместо переменных сеанса запроса и имени файла вы можете использовать все, что захотите. Также я бы поставил некоторую фиктивную переменную, как для одного из наших клиентов.
<?php
include your required libraries..
include_once("lib/xlsxwriter.class.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "IE=edge">
<title>Download IDs</title>
</head>
<body>
<?php
$sqlsel = $_SESSION['rptQry'];
$ressql = mysqli_query($sqlsel);
$currentdt = date('Ymdhis');
$filename = $currentdt."_".$_SESSION['rptFileName'];
$header = array(
'Header1'=>'integer',
'Header 2'=>'integer',
'Header 3'=>'string',
'Header 4' =>'string'
);
$dataArray = array();
$writer = new XLSXWriter();
$writer->setAuthor('Adaptable Services');
$writer->writeSheetHeader('ExportedIDs', $header);
while($res = mysqli_fetch_array($ressql)){
$writer->writeSheetRow('Sheet1',$res);
}
$writer->writeToFile('/var/www/html/tmpxls/'.$filename);
echo '<script>location.href = "www.example.com/tmpxls/'.$filename.'";</script>';
?>
</body>
</html>
Что произойдет, если это «не сработает»? Есть ли какое-нибудь сообщение об ошибке? Вы проверили, возвращает ли сам запрос к базе данных правильные строки?