PHPExcel генерирует полностью испорченный вывод - PullRequest
5 голосов
/ 31 мая 2011

Привет,

У меня проблемы с выяснением того, как правильно использовать PHP в целом и PHPExcel в частности.Я прочитал несколько сообщений на эту тему, и все же я бегал кругами.Вот соответствующая часть моего измученного кода:

$viewinv = mysql_connect($sqlsrv,$username,$password);
if (!$viewinv) { die('Could not connect to SQL server. Contact administrator.'); }
mysql_select_db($database, $viewinv) or die('Could not connect to database. Contact administrator.');
$query = "select unit_id,config,location from inventory;";
$result = mysql_query($query);

if ($result = mysql_query($query) or die(mysql_error())) {
   $objPHPExcel = new PHPExcel();
   $objPHPExcel->getActiveSheet()->setTitle('blah');

$rowNumber = 1;
$headings = array('Unit ID','Config','Location');
$objPHPExcel->getActiveSheet()->fromArray(array($headings),NULL,'A'.$rowNumber);
$rowNumber++;
while ($row = mysql_fetch_row($result)) {
   $col = 'A';
   foreach($row as $cell) {
      $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell);
      $col++;
   }
   $rowNumber++;
}
   $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

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

   $objWriter->save('php://output');
   exit();
}
echo 'a problem has occurred... no data retrieved from the database';

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

Например:

PKâh¿>G’D²Xð[Content_Types].xml­”MNÃ0…÷œ"ò%nY „švAa •(0ö¤±êØ–gúw{&i‰@ÕnbEö{ßøyìÑdÛ¸l mð¥‘×ÁX¿(ÅÛü)¿’òF¹à¡;@1_滘±Øc)j¢x/%ê…Eˆày¦ 

Любые указатели будут чрезвычайно признательны

Ответы [ 2 ]

14 голосов
/ 22 июля 2012

Ваша проблема, безусловно, заключается в выводе большего количества контента, чем просто данные Excel (которые содержатся в буфере вывода).

Чтобы решить вашу проблему, просто позвоните

  ob_clean(); //this will clean the output buffer

перед отправкой заголовка.

4 голосов
/ 31 мая 2011

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

XLSX (офис 2007 +):

Writer      : Excel2007 (PHPExcel_Writer_Excel2007)
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

XLS (до выпуска 2007 г.):

Writer      : Excel5 (PHPExcel_Writer_Excel5)
Content-Type: application/vnd.ms-excel
...