PHPExcel пишет странные символы

У меня есть файл PHP с запросом в sqlsrv, работает хорошо, сгенерировал файл Excel либо с PHPExcel, либо без библиотеки, файл Excel генерируется либо, но в следующей ячейке вниз после записи результатов пишет странные символы, подобные этому:

ÐÏà¡ ± á;; þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿ

…à…ŸòùOh "'+'³Ù0¸@Hh€˜ ° U Неименованная электронная таблицаНеизвестный создательНеизвестный создатель @ @M¦$Ò@ ¦M¦ $ ÒÒÌÒ = =¼ 1 1 1 1 1 1 1 1 1 1ÀÀÀÀÀÀÀÀÀÀ ÀÀÀÀÀÀÀÀÀÀÀÀÀ ÿõÿ à ÿ ÿ ÿ ÿ ÿ À À ÿ ÿ ÿ ÿ ÿ ÿ ÿ 3 3 3 3 3 3 3 3 3 ÌÌÌÿ ÌÌÌÿ € ™™ ™™ ™ÌÌ™ÿ ™3fÿ3ÌÌ™ÌÿÌÿ™ÿfff™–––3f3™f333™3™3f33™333…d Рабочая таблицаÁÁgæ®üXNombreDepartamentoFecha12/ октябрь /2016 " ffffffæ?(è?)è?¡"dXX333333Ó?333333Ó?U}$ }$ }$ }$ }$ }$ }$ }$ }$ ý ý ý ý ý ý >¶@d‹‹dggÿÿÿÿÿ þÿÕÍÕœ." - +,ù®0¼HPX`hp xŽä WorksheetFeuilles de calculRot Entryÿÿÿÿÿÿÿÿ ÀFÐM¦$ÒìM $ $ Ò SummaryInformation(À ÀFèWorkbookÿÿÿÿÿÿÿÿÿÿÿÿ ÀFdDocumentSummaryInformation8ÿÿÿÿÿÿÿÿÿÿÿÿ ÀFìþÿÿÿþÿÿÿþÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

Кто-нибудь знает как это исправить? Я тестировал локально, на удаленном сервере, с различными версиями PHP, и он идет одинаково....

Вот код:

<?php

require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';

$server = "192.168.1.240";
$info = array("Database"=>"Ariel","UID"=>"sa","PWD"=>"" );
$conn = sqlsrv_connect($server, $info);
$param = array('ReturnDatesAsStrings'=> true);
$opt = array("Scrollable" => SQLSRV_CURSOR_KEYSET);

$objPHPExcel = new PHPExcel();

$fec1 = $_GET["fecha1"];
$fec2 = $_GET["fecha2"];
$suc = $_GET["sucursal"];
$nom = 'Nombre';
$per = 'Personal';
$reg = 'Registro';
$hreg = 'Hora Registro';
$con = 'Concepto';
$fecd = 'Fecha';
$obs = 'Observaciones';
$dep = 'Departamento';

$sql = "select personal, (nombre +' '+apellidopaterno+' '+apellidomaterno) as '$nom', departamento as '$dep'
from personal where nombre like '%$nom%' and estatus = 'Alta' and sucursaltrabajo = '$suc'";

$sql2 = "select (p.nombre +' '+p.apellidopaterno+' '+p.apellidomaterno) as '$nom', ad.personal as '$per',ad.registro as '$reg', ad.horaregistro as '$hreg',ad.concepto as '$con',
ad.fechad as '$fecd', ad.observaciones as '$obs'
from asiste a join asisted ad on a.id= ad.id join personal p on p.personal = ad.personal 
where ad.sucursal = '$suc' and a.fechaemision between '$fec1' and '$fec2' order by ad.personal,ad.fechad";

$query = sqlsrv_query($conn, $sql2);

$query2 = sqlsrv_query($conn, $sql);

$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A3', 'Nombre');
$objPHPExcel->getActiveSheet()->setCellValue('B3', $nom);
$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Departamento');
$objPHPExcel->getActiveSheet()->setCellValue('B4', $dep);
$objPHPExcel->getActiveSheet()->setCellValue('H4', 'Fecha');
$objPHPExcel->getActiveSheet()->setCellValue('I4', date("d/M/Y"));

echo "<table border='1'><tr>";
echo "<th>$nom</th>";
echo "<th>$per</th>";
echo "<th>$reg</th>";
echo "<th>$hreg</th>";
echo "<th>$con</th>";
echo "<th>$fecd</th>";
echo "<th>$obs</th>";

while ($row = sqlsrv_fetch_array($query)) {

    $nom = $row['Nombre'];
    $per = $row['Personal'];
    $reg = $row['Registro'];
    $hreg = $row['Hora Registro'];
    $con = $row['Concepto'];
    $fecd = $row['Fecha'];
    $obs = $row['Observaciones'];

    echo "<tr>";
    echo "<th>".$nom."</th>";
    echo "<td>".$per."</td>";
    echo "<td>".$reg."</td>";
    if (!empty($hreg)) {
        echo "<td>".$hreg."</td>";
    }
    echo "<td>".$con."</td>";
    if (!empty($fecd)) {
        echo "<td>".$fecd->format("Y-m-d H:i:s")."</td>";
    }
    echo "<td>".$obs."</td>";
}

echo "</table>";

//header("Content-Type: application/vnd.ms-excel");
//header("Expires: 0");
//header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
//header('content-disposition: attachment;filename="Reporte '.$_GET['fecha1'].'\'\''.$_GET['fecha2'].'.xls"');

header('Content-Type: application/vnd.ms-excel');
header('content-disposition: attachment;filename="Reporte '.$_GET['fecha1'].'\'\''.$_GET['fecha2'].'.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

   sqlsrv_close( $conn);
?>

1 ответ

Добавьте следующий код перед заголовком

ob_end_clean();
Другие вопросы по тегам