PHP creó Excel Sheet crea errores al abrir

Entonces, mi código actual funciona al 100%, el archivo está hecho y se abre en Excel. Pero al abrir, hay algunos errores en los que uno debe hacer clic para abrir el archivo. Son los siguientes:

El formato de archivo y la extensión de 'address-book.xls' no coinciden. El archivo puede estar dañado o inseguro. A menos que confíes en su origen, no lo abras. ¿Quieres abrirlo de todos modos?

Entonces:

Excel ha detectado que 'address-book.xls es un archivo SYLK, pero no puede cargarlo. O el archivo tiene errores o no es un formato de archivo SYLK. Haga clic en Aceptar para intentar abrir el archivo en un formato diferente.

Entonces finalmente:

El formato de archivo y la extensión de 'address-book.xls' no coinciden. El archivo puede estar dañado o inseguro. A menos que confíes en su origen, no lo abras. ¿Quieres abrirlo de todos modos?

Después de eso se abre a regañadientes. Aquí está el código que lo crea. Cualquier ayuda para formatear la hoja de cálculo, como hacer que las celdas sean lo suficientemente grandes para el contenido, sería excelente. Pero deshacerme de los errores al abrir es mi prioridad.

<?PHP
require_once('conn.php');

$colnames = array(
    'id' => "ID",
    'Title' => "Title",
    'First_Name' => "First name",
    'Last_Name' => "Last Name",
    'Address' => "Address",
    'City' => "City",
    'State' => "State",
    'Zipcode' => "Zipcode",
    'Home_Phone' => "Home Phone",
    'Cell_Phone' => "Cell Phone",
    'Email1' => "Email #1",
    'Email2' => "Email #2"
);

function map_colnames($input){
    global $colnames;
    return isset($colnames[$input]) ? $colnames[$input] : $input;
}
function cleanData(&$str){
    $str = preg_replace("/\t/", "\\t", $str);
    $str = preg_replace("/\r?\n/", "\\n", $str);
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}

$filename = "address-book";

header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=".$filename.".xls"); 
header("Pragma: no-cache"); 
header("Expires: 0");
$flag = false;
$sql = "SELECT * FROM ".$sDB_table." ORDER BY Last_Name";
$query = $sDBConn -> prepare($sql);
$query -> execute();
while(false !== ($row = $query->fetch(PDO::FETCH_ASSOC))) {
    if(!$flag){
        $firstline = array_map(__NAMESPACE__ . '\map_colnames', array_keys($row));
        echo implode("\t", $firstline) . "\r\n";
        $flag = true;
    }
    array_walk($row, __NAMESPACE__ . '\cleanData');
    echo implode("\t", array_values($row)) . "\r\n";
}
exit;

?>

Error PHPExcel:

$colnames = array("Title","First name","Last Name","Address","City","State","Zipcode","Home Phone","Cell Phone","Email #1","Email #2");
$col = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');

// Add Headers
for($i=0;$i<count($colnames);$i++){
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue($col[$i]."1", $colnames[$i]);
}

$sql = "SELECT * FROM ".$sDB_table." ORDER BY Last_Name";
$query = $sDBConn -> prepare($sql);
$query -> execute();

$rownum = 1;
//Add Content
while(false !== ($row = $query->fetch(PDO::FETCH_ASSOC))) {
    $rownum++;
    for($i=0;$i<count($row);$i++){
        $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue($col[$i]."".$rownum, $row[$i]);        
    }
}

El error ocurre cuando golpea la instrucción while, si elimino esa parte, funciona.

Respuestas a la pregunta(1)

Su respuesta a la pregunta