@AlexVWill

Насчет экспорта таблицы MySQL в Excel средствами PHP?

Появилась подобная задача. Беглый гуглеж показывает ссылку на массу способов это сделать, например вот такой код
spoiler
<?PHP
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
 // Имя загружаемого файла. 
 //В моём примере получится otched_20150331.xls
$filename = "otchet_" . date('Ymd') . ".xls";

header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");

// Подключение к бд
mysql_connect ("Localhost","user","pass");// Хост юзер и пароль
mysql_select_db("my_bd") or die (mysql_error());// Имя базы данных

//Указать кодировку выводимых данных
mysql_query('SET character_set_database = cp1251_general_ci'); 
mysql_query ("SET NAMES 'cp1251'");

//запрос и вывод данных
$flag = false;
 $result = mysql_query("SELECT * FROM user ORDER BY Data DESC") 
 or die('Запрос не выполнен!');
 while(false !== ($row = mysql_fetch_assoc($result))) {
   if(!$flag) {
     // Вывод заголовков
     echo implode("\t", array_keys($row)) . "\r\n";
     $flag = true;
    }
    //Вывод данных столбцов    
     array_walk($row, 'cleanData');
     echo implode("\t", array_values($row)) . "\r\n";
  }
  exit;
?>


(я знаю, что код старый, и вызов функций PHP в нем пишется по другому, но его вполне реально переделать под современный PHP небольшой правкой).
Ну и все прочие методы, которые в общем то повторяют ту же идею с implode строк в заранее созданный пустой файл с xls расширением. Но что у меня получается - так это просто текстовый файл с расширением XLS с нужными заголовками и строками, но Excel его не открывает, т.к. формат xls файла вообще то другой, и ух никак не текстовый. Я в Excel не настолько хорошо разбираюсь, чтобы понять как это надо реализовать, это вообще так может работать или нет?
У кого то была подобная задача, наверняка была, это в общем то довольно распространенная задача. Может кто-то подсказать верное направление действий?
Спасибо.
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 3
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Ну например можно генерить html

Кстати, в этом примере просто попробуйте Content-Type: text/csv
только вместо разделителя тогда лучше использовать точку с запятой.
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
Выполняем SELECT .. INTO OUTFILE, полученный CSV прекрасно читается в Excel. Т.е. PHP выполняет указанный запрос, а потом, если надо, организует перемещение полученного CSV в нужное место.
Ответ написан
AlexNest
@AlexNest
Работаю с Python/Django
Используйте библиотеки, например PhpSpreadsheet.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы