Использование PHPExcel для экспорта в xlsx

Я использую PHPEXxcel для экспорта HTML-таблицы, сгенерированной с использованием MYSQL, и так далее.

<?php $query = "SELECT `Firstname`,`Lastname`,`Branch`,`Gender`,`Mobileno`, `Email` FROM `student_details` WHERE Branch IN ('$branch') and `Year`='$year' and Tenthresult > '$tenth' and Twelthresult > '$twelth' and (CGPA > '$cgpa' || CGPA = '$cgpa')"; $result = mysql_query($query); confirm_query($result); $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $rowCount = 1; $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,'Firstname'); $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,'Lastname'); $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'Branch'); $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,'Gender'); $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,'Mobileno'); $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,'Email'); while($row = mysql_fetch_array($result)){ $rowCount++; $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['0']); $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['1']); $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $row['2']); $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $row['3']); $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $row['4']); $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $row['5']); } $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save('some_excel_file.xlsx'); ?> 

Он работает, но сохраняет файл xlsx в корневой папке, не показывая пользователю никаких признаков того, что его загружают. Этот код вернется, когда я нажму кнопку button.now, могу ли я его загрузить, как мы загружаем вложение электронной почты и показывая пользователю в передней части, что его загружают вместе с местоположением.

Я попытался использовать

 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="01simple.xls"'); header('Cache-Control: max-age=0'); 

При этом я получаю то, что я хотел выше, но файл xls, загруженный при открытии, показывает сообщение «Файл, который вы пытаетесь открыть« имя файла », находится в другом формате, чем указанное расширение ….. и т. Д. Вы хотите открыть сейчас?

При открытии он содержит либо всю HTML-страницу, либо просто пустую … Может ли кто-нибудь мне помочь ..?

Таблицы 101

Существует много разных форматов файлов электронных таблиц, каждый из которых имеет свои собственные расширения имен файлов, и их можно отправить в веб-браузер с использованием разных типов mime. Они описаны в документации PHPExcel, и каждый из них имеет свой собственный Writer в PHPExcel. Вы несовпадаете с двумя разными форматами

Формат BIFF

  • Используется Microsoft Excel между версиями 95 и 2003 Файлом

  • расширение: xls

  • PHPEXcel Writer: PHPExcel_Writer_Excel5

  • Mime Тип: application / vnd.ms-excel

Формат OfficeOpenXML

  • Используется Microsoft Excel с версии 2007

  • Расширение файла: xlsx

  • PHPEXcel Writer: PHPExcel_Writer_Excel2007

  • Mime Тип: application / vnd.openxmlformats-officedocument.spreadsheetml.sheet

Не смешивайте и не сопоставляйте: если вы это сделаете, то Excel будет (и оправданно) жаловаться. Если вам нужен файл BIFF, используйте BIFF Writer (Excel5) PHPExcel, расширение файла .xls и тип mime, перечисленные выше для формата BIFF. Если вы хотите файл OfficeOpenXML, используйте PHPExcel Excel2007 Writer, расширение файла .xlsx и тип mime, перечисленные выше для OfficeOpenXML.

РЕДАКТИРОВАТЬ

Обратите внимание, что примеры, предоставленные с дистрибутивом PHPExcel, включают 01simple-download-xls.php и 01simple-download-xlsx.php, чтобы продемонстрировать, что именно вы хотите

Просто добавление этих заголовков отправляет только те заголовки. Остальная часть вашего кода остается прежней, поэтому вы сохраняете свой xls в своей корневой папке, как раньше.

Отправка заголовков делает только страницу, которую вы обычно видите, отправляете с заголовками xls. Что-то, чего вы не хотите, и вы получаете свою HTML-страницу, но с неправильными заголовками.

Что вам нужно сделать, это отправить эти заголовки, а затем передать поток xlsx .

Глядя на случайную нить (я знаю, плохая идея, но здесь вам будет предоставлен главенствующий пункт о том, что делать), вы можете найти такие примеры:

 header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=$filename.xls"); header("Content-Transfer-Encoding: binary "); $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->setOffice2003Compatibility(true); $objWriter->save('php://output'); 

попробуй это ..

 header('Content-Type: application/vnd.ms-excel'); $filename = "Reports".date("dmY-His").".xls"; header('Content-Disposition: attachment;filename='.$filename .' '); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');