PHP генерирует .xlsx

Я создаю файл Excel с расширением .xlsx

Вот мой простой код для генерации

 $file = "test.xlsx";
 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
 header('Content-Disposition: attachment; filename='.$file);
 $content = "Col1\tCol2\tCol3\t\n";
 $content .= "test1\ttest1\ttest3\t\n";
 $content .= "testtest1\ttesttest2\ttesttest3\t\n";
 echo $content;

Но я получаю сообщение об ошибке при открытии сгенерированного файла.

Excel cannot open the file 'test.xlsx' because the file format or file extension is not valid.

Я искал правильный код в течение 1 часа, но я не нашел решения.

Заранее спасибо.

Ответы на вопрос(4)

Посмотрите мой код, здесь я сделал простой файл xlsx

<?php

include 'PHPExcel/PHPExcel.php';
include 'PHPExcel/PHPExcel/Writer/Excel2007.php';

$objPHPExcel = new PHPExcel();


$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Trudeau');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Fernandes');

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));

echo " Click here for gerate xlsx file <a href='test.xlsx'>clicking me</a>";
?>

и для меня это работает нормально.

 JDuarteDJ10 авг. 2018 г., 17:35
Нет ссылки на включаемые файлы, откуда они берутся?

Возможно, файл несовместим с используемой версией Excel. Попробуйте изменить расширение файла «xlsx» на «xls» и проверьте, работает оно или нет. если это работает, тогда это расширение файла (.xlsx) не совместимо с версией Excel, которую вы использовали.

 angel enanod22 июн. 2016 г., 07:19
Да, я попробовал это, и .xls работал. Я узнаю, если это на версии. Спасибо
 angel enanod22 июн. 2016 г., 08:14
Я не думаю, что это на версии, потому что я пытался открыть файл .xlsx, и он открылся.
Решение Вопроса

Вы не сможете просто создать один без библиотеки. Прочитайте этоPHPExcel Github который должен указать вам в правильном направлении.

РЕДАКТИРОВАТЬ: PHPExcel устарел, вы можете использовать его наследник PHPS также на GitHub.PhpSpreadsheet

 angel enanod22 июн. 2016 г., 09:12
Спасибо за ссылку, я буду использовать это сейчас! :)
 NIKHIL NEDIYODATH09 мар. 2018 г., 13:32
Откуда я взял его документацию?
 NIKHIL NEDIYODATH09 мар. 2018 г., 13:33
Как использовать эту библиотеку?
 JDuarteDJ10 авг. 2018 г., 17:31
Я знаю, что это старый вопрос, но PHPExcel УСТАРЕЛ, вы можете использовать его вспомогательную таблицу PHPS также на GitHub.github.com/PHPOffice/PhpSpreadsheet
 Drew23 июн. 2016 г., 01:20
Не беспокойся, мое удовольствие. Не забудьте попробовать другие ответы, чтобы увидеть, являются ли они больше того, что вы ищете, и отметить наиболее подходящий ответ. Это помогает и вам, и человеку, который ответил на вопрос. Посетите справочный центр по переполнению стека по адресуstackoverflow.com/help/someone-answers Больше подробностей.
 Zyigh14 мая 2018 г., 14:43
@DrewLean Спасибо за ваш ответ. Когда я искал такую ​​библиотеку, я просмотрел вашу ссылку и, видимо, этот репо больше не поддерживается. Они рекомендуют использоватьэтот

Контент не является действительным контентом xlsx. Попробуйте отправить свой контент в виде значения с разделением запятыми и используйте xls, чтобы открыть

В качестве предложения, если вы можете изменить свой контент, может быть, вы могли бы попробовать это?

$file = "test.csv";
 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
 header('Content-Disposition: attachment; filename='.$file);
 $content = "Col1,Col2,Col3\n";
 $content .= "test1,test1,test3\n";
 $content .= "testtest,ttesttest2,testtest3\n";
 echo $content;
 Trudeau Fernandes22 июн. 2016 г., 06:27
Я полностью согласен .. Просто я нашел содержание очень простым и хорошим кандидатом в формате CSV.
 Drew22 июн. 2016 г., 06:22
Это эффективно создало бы CSV все же. .Xls и .xlsx разные. Если бы он создал CSV, то fputcsv () была бы лучше, чем то, что он пытается использовать.
 angel enanod22 июн. 2016 г., 07:20
@TrudeauFernandes спасибо за предложение, но мне нужен формат xlsx.

Ваш ответ на вопрос