PHP erstellt Excel Sheet erzeugt Fehler beim Öffnen

Also, mein aktueller Code funktioniert zu 100%, die Datei wird erstellt und in Excel geöffnet. Beim Öffnen treten jedoch einige Fehler auf, durch die Sie klicken müssen, um die Datei zu öffnen. Sie sind wie folgt

Das Dateiformat und die Erweiterung von 'address-book.xls' stimmen nicht überein. Die Datei ist möglicherweise beschädigt oder unsicher. Öffnen Sie es nicht, es sei denn, Sie vertrauen seiner Quelle. Möchten Sie es trotzdem öffnen?

Dann

Excel hat festgestellt, dass 'address-book.xls eine SYLK-Datei ist, diese aber nicht laden kann. Entweder weist die Datei Fehler auf oder es handelt sich nicht um ein SYLK-Dateiformat. Klicken Sie auf "OK", um zu versuchen, die Datei in einem anderen Format zu öffnen.

Dann endlich

Das Dateiformat und die Erweiterung von 'address-book.xls' stimmen nicht überein. Die Datei ist möglicherweise beschädigt oder unsicher. Öffnen Sie es nicht, es sei denn, Sie vertrauen seiner Quelle. Möchten Sie es trotzdem öffnen?

Nachdem öffnet es sich widerwillig. Hier ist der Code, der es erstellt. Jede Hilfe beim Formatieren der Tabelle, z. B. wenn die Zellen groß genug für den Inhalt sind, wäre großartig. Aber die Fehler beim Öffnen zu beseitigen, ist meine Priorität.

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

?>

PHPExcel Fehler:

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

Der Fehler tritt auf, wenn die while-Anweisung aufgerufen wird. Wenn ich diesen Teil herausnehme, funktioniert er.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage