2012-03-14 30 views
14

Estoy construyendo un plugin de WordPress usando PHPExcel para exportar informes de asistencia estudiantil. Hasta ahora, puedo tomar con éxito la matriz de datos de los estudiantes (incluida la asistencia) y convertirla y descargarla como una hoja de cálculo. Desafortunadamente, hay una extraña falla: cuando un estudiante ha asistido a cero eventos, esa celda en la hoja de cálculo está en blanco en lugar de mostrar cero. Preferiría que salga con un cero real, pero no puedo encontrar una manera de hacerlo. Aquí está mi guión:PHPExcel saca ceros como celdas en blanco

error_reporting(E_ALL); 
ini_set('include_path', ini_get('include_path').';../Classes/'); 

include 'PHPExcel.php'; 
include 'PHPExcel/Writer/Excel2007.php'; 

$objPHPExcel = new PHPExcel(); 

$objPHPExcel->setActiveSheetIndex(0); 
$objPHPExcel->getProperties()->setCreator($user); 
$objPHPExcel->getProperties()->setLastModifiedBy($user); 
$objPHPExcel->getProperties()->setTitle($title); 
$objPHPExcel->getProperties()->setSubject($title); 
$objPHPExcel->getProperties()->setDescription($title); 
$objPHPExcel->getActiveSheet()->fromArray($data, null, 'A1'); 
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFont()->setBold(true); 

$columns = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'); 

foreach ($columns as $column) { 

    $objPHPExcel->getActiveSheet()->getColumnDimension($column)->setAutoSize(true); 

} // End $columns foreach 

$file_name = str_replace(' ', '_', $title); 

if ($_POST['type'] == 'spreadsheet') { 

header('Content-type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="' . $file_name . '.xls"'); 

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save('php://output'); 

} 

$ de datos contiene la matriz de información de los estudiantes, que se estructura como esta:

Array (
    [0] => Array (
     [0] => First Name 
     [1] => Last Name 
     [2] => BU ID 
     [3] => Barcode 
     [4] => Major 
     [5] => Class 
     [6] => Seminars 
     [7] => Showcases 
    ) 

    [1] => Array (
     [first_name] => Seth 
     [last_name] => Abel 
     [buid] => B00385307 
     [barcode] => 100324707 
     [student_major] => CMM 
     [class] => MBU2100 
     [seminar] => 0 
     [showcase] => 1 
    ) 

    [2] => Array (
     [first_name] => Zachary 
     [last_name] => Abend 
     [buid] => B00373103 
     [barcode] => 100291996 
     [student_major] => MBU 
     [class] => MBU2100 
     [seminar] => 0 
     [showcase] => 1 
    ) 
. 
. 
. 
) 

Como se puede ver es el ejemplo de datos, los aquellos estudiantes han cada uno asistido 1 vitrina , pero cero seminarios. Cuando esta hoja de cálculo se descarga y abre en Excel, el 1 aparece bien, pero las celdas del seminario están en blanco. Dado que estoy usando la función fromArray() para rellenar la hoja de cálculo, ¿hay algo que deba hacer para que esos ceros aparezcan correctamente?

Respuesta

24

Creo que es una víctima de las comparaciones con tipo débilmente aquí - que ha especificado null como su segundo parámetro a fromArray(), que representa la Value in source array that stands for blank cell. Desde null == 0, esto significa que cero dará como resultado una celda en blanco a menos que establezca el cuarto argumento en true. cambio

Probar:

$objPHPExcel->getActiveSheet()->fromArray($data, null, 'A1'); 

... a ...

$objPHPExcel->getActiveSheet()->fromArray($data, null, 'A1', true); 
+0

Gracias a Dave! Sabía que era algo simple, simplemente no podía cazarlo. ¡Gracias, gracias, gracias! – Slushman

+0

No pude encontrar esto en ningún lugar del sitio, pero una búsqueda de 1 segundo en Google generó esta pregunta como primer resultado. No estoy seguro si eso es más de algo bueno para StackOverflow o algo malo para la documentación de PHPExcel. – trysis

+0

@DaveRandom esto no funciona para mí. Estoy usando 'phpexcel' 1.8. – Valay

Cuestiones relacionadas