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.