2011-05-31 14 views
5

Saludos,PHPExcel genera salida totalmente sincronizada

Tengo problemas para entender cómo usar correctamente PHP en general y PHPExcel en particular. He leído varias publicaciones sobre este tema y, sin embargo, he estado corriendo en círculos. Aquí está la parte pertinente de mi código jacked:

$viewinv = mysql_connect($sqlsrv,$username,$password); 
if (!$viewinv) { die('Could not connect to SQL server. Contact administrator.'); } 
mysql_select_db($database, $viewinv) or die('Could not connect to database. Contact administrator.'); 
$query = "select unit_id,config,location from inventory;"; 
$result = mysql_query($query); 

if ($result = mysql_query($query) or die(mysql_error())) { 
    $objPHPExcel = new PHPExcel(); 
    $objPHPExcel->getActiveSheet()->setTitle('blah'); 

$rowNumber = 1; 
$headings = array('Unit ID','Config','Location'); 
$objPHPExcel->getActiveSheet()->fromArray(array($headings),NULL,'A'.$rowNumber); 
$rowNumber++; 
while ($row = mysql_fetch_row($result)) { 
    $col = 'A'; 
    foreach($row as $cell) { 
     $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell); 
     $col++; 
    } 
    $rowNumber++; 
} 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="myFile.xls"'); 
    header('Cache-Control: max-age=0'); 

    $objWriter->save('php://output'); 
    exit(); 
} 
echo 'a problem has occurred... no data retrieved from the database'; 

PHPExcel es, sin duda la salida de datos de la consulta, puedo ver fragmentos de texto plano, pero está rodeado de un montón de caracteres aleatorios como si aunque Estoy mirando el contenido de una pieza de datos comprimida o compilada.

Por ejemplo:

PKâh¿>G’D²Xð[Content_Types].xml­”MNÃ0…÷œ"ò%nY „švAa •(0ö¤±êØ–gúw{&i‰@ÕnbEö{ßøyìÑdÛ¸l mð¥‘×ÁX¿(ÅÛü)¿’òF¹à¡;@1_滘±Øc)j¢x/%ê…Eˆày¦ 

Cualquier indicador sería muy apreciada

Respuesta

4

El problema es probable que se resuelve haciendo coincidir los tipos escritor correctos para la correcta extensión de tipos de contenido y archivo.

XLSX (oficina 2007+):

Writer  : Excel2007 (PHPExcel_Writer_Excel2007) 
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 

XLS (antes de la oficina 2007):

Writer  : Excel5 (PHPExcel_Writer_Excel5) 
Content-Type: application/vnd.ms-excel 
+0

Inicialmente estaba configurado en Excel5, lo configuré en Excel2007 para probar si saldría correctamente. El resultado es el mismo en Excel5 y Excel2007, todos los datos están distorsionados. También Excel muestra una advertencia que dice "El archivo que está intentando abrir __, está en un formato diferente al especificado por la extensión del archivo. Verifique que el archivo no esté dañado y provenga de una fuente confiable antes de abrir el archivo. para abrir el archivo ahora? " – floppyraid

+0

¿Obtiene la advertencia de extensión de archivo para Excel5 también o solo con Excel2007? Además, ¿con qué versión de Excel (oficina) está probando esto? –

+0

Con Excel5 y .xls recibo esa advertencia. Con Excel2007 y .xlsx recibo una advertencia diferente. "No se puede abrir el archivo porque el formato de archivo o la extensión de archivo no son válidos. Verifique que el archivo no esté dañado y que la extensión del archivo coincida con el formato del archivo". Estoy usando Office Professional Plus 2010. – floppyraid

14

Su problema es, sin duda, en la salida de más contenido que sólo los datos de Excel (que está contenida en la salida buffer).

para resolver su problema, simplemente llame

ob_clean(); //this will clean the output buffer 

antes de enviar la cabecera.

+2

Este es el problema: para probar si tiene este problema, escriba el archivo en el disco local y descárguelo manualmente. Si se abre bien en Excel, entonces el problema es más contenido como sugiere MOleYArd. En mi experiencia, no es necesario utilizar el encabezado openxmlformats anterior, un encabezado de tipo de contenido de octetos simple funcionará bien y es más genérico y, por lo tanto, probablemente más compatible con navegadores/plataformas. – Ross

+0

¡Resolvió mi problema! Gracias ! – IgorSousaPT

+0

¡Gracias! Has guardado un día. – BlueSuiter