Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: EscobarCamilo en 16 de Julio 2015, 17:07
-
Buenos días: Agradezco quien me pueda colaborar con esta inquietud.
Usando phpExcel y mysql, necesito hacer una consulta y el resultado me lo coloque en una sola celda de excel que yo le indique, de un archivo plantilla que tengo.
Ej. El resultado de la consulta es: Camilo, Andres, Gustavo. Necesito que estos tres nombres o los que sean, me los guarde en por ejemplo la celda E1 de un archivo de excel. (No que me ponga los datos uno en cada celda.) Lo he intentado, y me genera el excel pero no me coloca nada en la casilla, pero cuando hago un echo $resultado, si me muestra bien la consulta. Agradezco si me puedne dar una luz. Este es el código que estoy utilizando.
require_once('../../../prod/third/phpexcel/PHPExcel.php');
require_once('../../../prod/third/phpexcel/PHPExcel/IOFactory.php');
//Utilizo un excel plantilla que tengo.
$objTpl = PHPExcel_IOFactory::load("../../../app/MRE/doc/MRE.xls"); $objTpl->setActiveSheetIndex(0);
//set first sheet as active
$query = "SELECT nombre FROM tabla where apellido = 'Escobar'"; $resultado = mysql_query($query);
$total = mysql_num_rows($resultado); while($row = mysql_fetch_array($resultado)) {
// Si dejo este código hasta aqui.. me sale en pantalla el resultado deseado.
//echo $dato ['nombre']; }
//aqui deberia colocarme en la celda E12 los tres nombres del resultado, pero me genera el excel y la casilla está en blanco.
$objTpl->getActiveSheet()->setCellValue('E12' . $row['nombre']);
Quiero que en la celda me quede por ejemplo:
Andres
Juan
Camilo
Bien agradezco sus sugerencias y colaboración. Un abrazo.
-
Hola, supongo que estás usando PHPExcel de https://phpexcel.codeplex.com/releases/view/119187
No puedo hacer comprobaciones porque no tengo el código completo con el que estás trabajando. Habría diversas comprobaciones que realizar.
A primera vista parece que no estás usando la sintaxis adecuada.
Esto es un ejemplo de sintaxis básica:
/** Include PHPExcel */
require_once 'PHPExcel.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Thouhedul islam")
->setLastModifiedBy("Thouhedul islam")
->setTitle("PHPExcel Tutorial from tisuchi.com")
->setSubject("PHPExcel Tutorial from tisuchi.com")
->setDescription("This is the tutorial for PHP Excel from tisuchi.com")
->setKeywords("office PHPExcel php")
->setCategory("Tutorial Result");
// Add Data in your file
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Visit ')
->setCellValue('B1', 'tisuchi.com')
->setCellValue('C1', 'for interesting')
->setCellValue('D1', 'tutorail');
$objPHPExcel->getActiveSheet()->setCellValue('A8',"Posted in \n tisuchi.com");
$objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true);
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('tisuchi.com');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Save Excel 2007 file
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, 'http://localhost/php')) , EOL;
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save(str_replace('.php', '.xls', __FILE__));
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
// Echo done
echo " Done writing files" , EOL;
Si te fijas por ejemplo en esta línea $objPHPExcel->getActiveSheet()->setCellValue('A8',"Posted in \n tisuchi.com");
ves que no se corresponde con $objTpl->getActiveSheet()->setCellValue('E12' . $row['nombre']);
Tienes un punto en lugar de una coma.
Para ver si el código es correcto hasta el momento de la escritura prueba a poner esta instrucción:
$objTpl->getActiveSheet()->setCellValue('E12' , "prueba de escritura");
Comprueba si te escribe correctamente la frase "prueba de escritura" en el archivo excel antes de tratar de introducir los datos.
Saludos
-
Otra cosa, el título del tema debe referirse a aquello que consultas, en este caso has hecho referencia al ejercicio CU00828B del curso PHP pero la consulta no tiene nada que ver con esto ¿?
-
Hola Alex, disculpa, te iba a responder y di por equivocación en reportar al moderador. Lo siento. Quería decirte que la sintaxis parece rara, pero está bien porque lo estoy haciendo por medio del scriptcase y tiene sus librerías de phpexcel en esa ruta.
Disculpa por lo de la ubicación del foro y tema, es la primera vez que lo hago y andaba medio perdido.
Al hacer prueba de escribir manualmente si me escribe en la celda, el problema es que al querer escribir el resultado de la consulta no me pone nada. He probado con punto, con coma, e igual no me pone el resultado. Si por ejemplo coloco manualmente que me escriba 'prueba' en una celda, me lo escribe sin problemas. No logro plasmar el resultado de la consulta en la celda. El resultado de mi consulta son digamos 3 registros, Juan, Andres y Camilo, y quiero que estos 3 nombres me los coloque en la misma celda que yo le indique. Cabe anotar que lo hago no en un nuevo excel sino en una plantilla que tengo.
Gracias amigo.
-
Hola de nuevo, si el resultado son tres registros ( o n registros) tendrás que recorrerlos usando un bucle, introducir cada uno de los registros en una cadena usando concatenación, y esa cadena insertarla en el Excel.
Es decir, suponiendo que con $row['nombre'] extraigas los tres nombres correctamente dentro del bucle deberías hacer
$cadena = $cadena.$row['nombre'].'-';
Una vez sales del bucle hacer la inserción:
$objTpl->getActiveSheet()->setCellValue('E12' , $cadena);
Referencia para recorrer los items de la consulta: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=613:ejemplo-consulta-php-mysql-select-bucle-while-mysqlifetcharray-recorrer-resultados-query-cu00842b&catid=70:tutorial-basico-programador-web-php-desde-cero&Itemid=193
Referencia para concatenar cadenas: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=563:concatenar-cadenas-strings-php-strlen-longitud-caracteres-y-substr-extraer-subcadenas-cu00821b&catid=70:tutorial-basico-programador-web-php-desde-cero&Itemid=193
Todo el curso PHP: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193
Saludos
-
Hola, me sale variable $cadena no definida. Pregunto, en el caso que el resultado de mi consulta sea un solo registro (no tendría que concatenar nada), debería ponerlo sin problema no? y aun así no lo coloca. Y lo raro es que cuando hago
echo $dato ['nombre'];
si me muestra el resultado en pantalla como es. Disculpa pero la verdad es que soy muy nuevo.
-
Hola inicializa $cadena antes del bucle como $cadena = ""; //Cadena vacía
Por un lado estás haciendo referencia a $dato ['nombre'] y por otro a $row['nombre'] pero no veo dónde tienes definida la variable $dato posiblemente en otra parte del código ¿?
Si el resultado de la consulta es un solo registro el tipo de dato no coincide o no es reconocido como cadena, debes asegurarte de que sea tratado como una cadena para poder trabajar con él.
Saludos
-
Hola, ya no me sale lo de definir la variable, lo inicialice como dices.
Ahora lo de dato y row, fue que le cambie el nombre, pero ya lo unifiqué. es $row.
Hice la prueba, y me escribe en la celda solamente esto: - que es la linea que está en
$cadena = $cadena.$row['nombre'].'-';
Pero no me pone el resultado. :( (Será que hay que convertir el resultado en algo?).
Si yo hago la prueba escribiendo:
echo $row ['nombre'];
Me arroja el resultado de la consulta bien.
-
Puedes tener un conflicto con las comillas
$cadena = $cadena.$row['nombre'].'-'; parece un mal cierre de comillas.
Prueba con
$cadena = $cadena.$row['nombre']."-";
Esto elimina la ambiguedad en las comillas al quedar la comilla simple como delimitador del índice del array asociativo y las comillas dobles como delimitadoras para concatenación de la cadena.
Para descartar otros problemas sube esto en un archivo al servidor y comprueba el resultado:
<?php
$cadena = '';
$txt1 = 'pablo';
$txt2 = 'juan';
$cadena = $cadena.$txt1.' - ';
$cadena = $cadena.$txt2. ' y fin';
echo 'Resultado: '.$cadena;
?>
¿Qué resultado obtienes?
Saludos
-
Hola, el resultado es este:
Resultado: pablo - juan y fin
Probé lo de las comillas "" y '' y de todas fomras solo me pone en la celda esto: -
Es como si no reconociera el valor que hay dentro de $row['nombre']
-
Es extraño. ¿Tienes activado el depurador php en el servidor? Es decir, si tienes alguna incorrección en la sintaxis te muestra por pantalla el mensaje de error y la línea donde el analizador sintáctico detecta el error?
-
Hola, gracias por responder. Si claro, el me muestra cuando hay error, y en que linea. Pero no me dice nada. Solo me ejecuta el código, me abre el excel, y sorpresa.. :( en la celda no hay nada. Ya no se que hacer.....
-
Hola prueba con
$objTpl->getActiveSheet()->setCellValueExplicit('E12', $row['nombre'], PHPExcel_Cell_DataType::TYPE_STRING);
-
Me genera el excel, no me saca ningún error pero sigue saliendo la casilla en blanco. No me coloca nada. Me da pena contigo que debes andar bien ocupado. Tu podrías hacer una prueba tuya localmente? Una tabla consultas algo que te arroje varios resultados y lo guardes a una celda de excel? (con phpExcel). Y lo que pasa es que si soluciono eso puedo salir adelante con mi trabajo, de lo contrario me van a sacar del puesto :(
-
Alex, amigo. Gracias por tu ayuda. Mágicamente se me iluminó la mente, y me dio por cambiar un }. Sabes que ocurría? que hacía la consulta y cerraba con } y luego hacia la instrucción de pasar el resultado a excel. No sé pero seguro al cerrar con } antes de hacer la copia al excel el cerraba la consulta y borraba los resultados. No sé.
Ya me aparecen los resultados en la celda que necesito. :) Te mando un abrazo y gracias por toda tu buena actitud y colaboración.
-
Pues me alegro que se haya resuelto, a veces pequeños detalles causan grandes problemas, igualmente un abrazo. Hablamos por los foros! Saludos
-
Si amigo, de nuevo muchas gracias por tu paciencia. Como hago para cerrar el tema o darlo como resuelto?
-
Hola, para dar un tema como resuelto no solemos hacer ninguna acción específica, simplemente indicarlo en la propia conversación. Una vez la conversación se cierra el tema ya va pasando a un segundo plano a medida que llegan nuevos mensajes a los foros. Saludos.