2014-09-12 2 views
0

Хорошо, теперь я читал примеры phpexcel. Насколько я понимаю, не должно быть никакого другого выхода на странице, чтобы создать правильный файл xls. Я думаю, что это так, потому что, когда у меня естьPHPexcel выпускает

echo "some output and my form for query"; 
      $objPHPExcel = new PHPExcel(); 
      $objPHPExcel->getProperties()->setCreator("Administrator"); 
      $objPHPExcel->getProperties()->setLastModifiedBy("Administrator"); 
      $objPHPExcel->getProperties()->setTitle("test"); 
      $objPHPExcel->getProperties()->setSubject("test"); 
      $objPHPExcel->getProperties()->setDescription("test"); 

      $objPHPExcel->setActiveSheetIndex(0); 
      $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello'); 
      $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!'); 
      $objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello'); 
      $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!'); 

      $objPHPExcel->getActiveSheet()->setTitle('Simple'); 

      $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
      // Redirect output to a client’s web browser (Excel5) 
      header('Content-Type: application/vnd.ms-excel'); 
      header('Content-Disposition: attachment;filename="01simple.xls"'); 
      header('Cache-Control: max-age=0'); 
      // If you're serving to IE 9, then the following may be needed 
      header('Cache-Control: max-age=1'); 

      // If you're serving to IE over SSL, then the following may be needed 
      header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
      header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
      header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
      header ('Pragma: public'); // HTTP/1.0 
echo"some other code"; 

И получить XLS, он имеет предупреждения, что doen't есть CSS ссылки там и кроме того, он ставит много текста, кроме Привет, мир !, такие как ссылки в Ехчел , Это выглядит следующим образом: Output in excel

Я могу поставить все работы с XLS в другом файле PHP и получить его с помощью AJAX, но как я могу дать результаты запроса к этому файлу? Все запросы должны быть в моем основном файле, потому что я не хочу иметь несколько подключений к базе данных. Как ясно, чего я хочу. Какие-нибудь советы?

+1

Вы правы, вы не можете быть вторите вывод, и передавать Excel файл в браузер для загрузки в том же запросе, иначе вы просто повредите файл формата Excel, чтобы MS Excel не мог его правильно прочитать. Вы генерируете ___either___ разметку HTML, ___or___ файл Excel в одном запросе, но не оба .... это не проблема PHPExcel, это проблема с http ... было бы одинаково, если бы у вас был запрос на создание файл изображения или pdf или zip-архив данных .... только один тип файла для запроса –

+0

Спасибо за объяснение. Любые идеи, как решить проблему? –

+0

Решение должно отправлять только один тип ответа с каждым запросом .... даже если это означает, что каждый запрос должен считывать данные из базы данных. –

ответ

0

Чтобы загрузить файл xls (x), вы должны установить правильные заголовки и очистить буфер, чтобы избежать плохого потока. В документации объясняет, вы можете попробовать с этим кодом:

//------------- Enter your code before this line --------- // 

// Cleaning buffer 
ob_clean(); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

/* Or you can use 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
*/ 

// redirect output to client browser 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="your_filename.xls"'); 
/* Use this for Writer Excel2007  
header('Content-Disposition: attachment;filename="your_filename.xlsx"'); 
*/ 
header('Cache-Control: max-age=0'); 

//Start Download 
$objWriter->save('php://output'); 

Вы можете обратиться here для разработчиков Документации PHPExcel

Смежные вопросы