#php #mysql #excel
#php #mysql #excel
Вопрос:
Я использую PHP для экспорта данных из таблицы в электронную таблицу Excel. По какой-то причине вверху есть пустые строки.
Как вы можете видеть на изображении выше, заголовки начинают печататься в строке 9, и, конечно, данные начинают печататься позже, то, что я не показывал.
Мой код работает и делает то, что мне нужно. Я просто пытаюсь понять, почему он печатает пустые строки вверху.
Вот код:
<?php
$ts = date('mdY-His');
session_start();
$where = $_SESSION['where']; // this is the parameters passed from another file
$sql = "SELECT * FROM mainTable WHERE " . $where . " ORDER BY CON_STATUS;";
$result = mysql_query($sql) or die("<script language='javascript'>
window.alert('There was no data to send')
window.location.href='../home.php'
</script>");
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=importdetails-".$ts.".xls");
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
$sep = "t";
for($i = 0; $i < mysql_num_fields($result); $i )
{
echo mysql_field_name($result, $i) . "t";
}
print("n");
while($row = mysql_fetch_row($result))
{
$schema_insert = "";
for($j = 0; $j < mysql_num_fields($result); $j )
{
if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep;
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert = preg_replace("/rn|nr|n|r/", " ", $schema_insert);
$schema_insert .= "t";
print(trim($schema_insert));
print "n";
}
?>
Как указано, мой код работает, помимо печати пустых строк в верхней части таблицы. Если вы видите что-нибудь в моем коде, что удалит пустые строки, это было бы очень полезно.
Комментарии:
1. Во-первых, вы не должны использовать
mysql_*
функции — они устарели. Во-вторых, могу я предложить: phpexcel.codeplex.com — Это сделает вашу жизнь намного проще.2. Вероятно, print » n»; этот бит добавляет пустые строки.
3. Что касается этой строки: for($j-0; $j < mysql_num_fields($result); $j ) — Ошибка при установке начального значения $ j, ‘-‘ должно быть ‘=’
4. Что касается этой строки: for($i = 0; $i < mysql_num_fields($results); $i ) — ошибка в написании ‘$results’ должно быть ‘$result’
Ответ №1:
Я не тестировал это, но мне кажется, что это проблема с вашей строкой
for($j-0; $j < mysql_num_fields($result); $j )
Обратите внимание, что вы не устанавливаете $j=0
, а вычитаете 0
из $j
Комментарии:
1. Извините. Это была опечатка. Исправляем это сейчас.