A planilha Excel criada pelo PHP cria erros ao abrir

Portanto, meu código atual funciona 100%, o arquivo é criado e aberto no Excel. Mas, ao abrir, existem alguns erros nos quais é necessário clicar para abrir o arquivo. Eles são os seguintes:

O formato e a extensão do arquivo 'address-book.xls' não correspondem. O arquivo pode estar corrompido ou não é seguro. A menos que você confie na fonte, não a abra. Deseja abri-lo assim mesmo?

Então:

O Excel detectou que 'address-book.xls é um arquivo SYLK, mas não pode carregá-lo. O arquivo tem erros ou não é um formato de arquivo SYLK. Clique em OK para tentar abrir o arquivo em um formato diferente.

Então finalmente:

O formato e a extensão do arquivo 'address-book.xls' não correspondem. O arquivo pode estar corrompido ou não é seguro. A menos que você confie na fonte, não a abra. Deseja abri-lo assim mesmo?

Depois disso, ele relutantemente abre. Aqui está o código que o cria. Qualquer ajuda para formatar a planilha, como ter as células grandes o suficiente para o conteúdo, seria ótima. Mas me livrar dos erros ao abrir é minha prioridade.

<?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;

?>

Erro 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]);        
    }
}

O erro ocorre quando atinge a instrução while, se eu retirar essa parte, ela funciona.

questionAnswers(1)

yourAnswerToTheQuestion