Я пытаюсь создать файл excel с расширением .xlsx из кода ниже. Я могу загрузить файл очень хорошо, но когда я его открываю с помощью листа excel, я получаю следующую предупреждающую ошибку. Excel не может открыть файл «dindi.xlsx», потому что формат файла или расширение файла недействительны. Убедитесь, что файл не поврежден и что расширение файла соответствует формату файла. Когда я открыл его с помощью блокнота, файл имел следующую ошибку:
Примечание: ob_end_clean () [ref.outcontrol]: не удалось удалить буфер. Нет буфера для удаления
- PHPExcel занимает очень много времени, чтобы прочитать файл Excel
- Получение имени столбца из индексов строк и столбцов в PHPExcel
- PHPExcel - ошибка циклической ссылки в формуле
- PHPExcel Style получает формат номера по умолчанию
- Как сгенерировать хороший PDF-файл с помощью php Excel?
- PHPExcel - рендеринг графика и загрузка excel
Ниже приведен код того, что я пытаюсь сделать.
public function exportResults() { $this -> load -> database(); $query = $this -> db -> query(" SELECT * FROM farm LIMIT 10"); $results = $query -> result_array(); $objPHPExcel = new Excel(); $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objPHPExcel = $objReader->load('./files/farmdetails.xlsx'); $objPHPExcel ->getActiveSheet()->setTitle('farmreport'); $objPHPExcel -> setActiveSheetIndex(0); $i = 1; foreach ($results as $result) { $objPHPExcel -> getActiveSheet() -> SetCellValue('A' . $i, $result["name"]); $objPHPExcel -> getActiveSheet() -> SetCellValue('B' . $i, $result["dateofcontract"]); $objPHPExcel -> getActiveSheet() -> SetCellValue('C' . $i, $result["leasorname"]); $objPHPExcel -> getActiveSheet() -> SetCellValue('D' . $i, $result["acre"]); $objPHPExcel -> getActiveSheet() -> SetCellValue('E' . $i, $result["zone"]); $i++; echo $result["name"]; } ob_end_clean(); $filename = "dindi.xlsx"; header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename=' . $filename); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); ob_end_clean(); $objWriter -> save('php://output'); $objPHPExcel -> disconnectWorksheets(); unset($objPHPExcel); }
Эта ошибка просто говорит вам, что не было буфера для удаления. Чтобы избежать этого, просто используйте:
if (ob_get_contents()) ob_end_clean();
(проверьте, есть ли активный буфер вывода) или:
if (ob_get_length()) ob_end_clean();
(проверяет, есть ли пустая строка в буфере), как было предложено @Venu.
также вы вызываете ob_end_clean();
два раз есть. И это работает только со стеклизуемыми буферами. Из руководства по PHP:
Эта функция отбрасывает содержимое самого верхнего выходного буфера и отключает эту буферизацию вывода.
Вы уверены, что не хотите использовать ob_clean () ?
Из раздела комментариев к документации по PHP , кредит на cornel на scoalaweb dot com:
Не используйте ob_clean()
или ob_end_clean()
для очистки белого пробела или другого нежелательного содержимого, «случайно» генерируемого включенными файлами.
Вложенные файлы не должны генерировать нежелательный контент в первую очередь.
Если это так, вы делаете что-то не так, как вставка пробела после « ?>
» (В конце PHP-файлов не должно быть « ?>
») Или других ошибок, которые не следуют основным правилам синтаксиса PHP ,