Отображение всех полей в одном столбце Excel

Я использую следующий код для экспорта MySQL запроса в Excel. После загрузки листа Excel я получаю сообщение об ошибке при открытии
«Формат файла и расширение не форматируются. Файл может быть поврежден или небезопасен»

Если я открою его, я получу все поля одной записи в одной строке (даже если я использую \t разделитель между полями, как показано в коде).
если я использую в тексте Excel для столбца разделитель является вкладкой, то все данные разделены правильно.

если я использую запятую в коде в качестве разделителя вместо \t … тогда это будет работать нормально

<?php
$excel_query = unserialize($_SESSION['correspondence_cvs_query']);
mysqli_query($connection,"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
$result = mysqli_query($connection, $excel_query);
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
header('Content-Disposition: attachment; filename=test.xls');
header('Content-Type: application/vnd.ms-excel; charset=utf-8');
header('Pragma: no-cache');
header('Expires: 0');
while ($row=mysqli_fetch_row($result))
{
array_walk($row, 'cleanData');
echo implode("\t", array_values($row)) . "\r\n";
}
exit;
?>

-2

Решение

Сохраняйте заголовок типа содержимого так, как он есть, но изменяйте имя файла вложения.

Используйте имя файла, которое заканчивается на .csv для запятой. Используйте .txt для табуляции. Когда Excel увидит расширение имени файла, он будет знать, как проанализировать файл.

Расширение .xls сбивает с толку Excel. Если вы используете имя файла, оканчивающееся на .xls, файл должен быть в проприетарном формате Excel, который, я сомневаюсь, вы можете легко восстановить.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector