Foros del Web » Programando para Internet » PHP »

Crear documento Word a partir de una base de datos

Estas en el tema de Crear documento Word a partir de una base de datos en el foro de PHP en Foros del Web. Hola! Me gustaría saber si es posible generar un documento word a partir de una base de datos.Me explico:tengo una pagina web en la que ...
  #1 (permalink)  
Antiguo 21/10/2005, 16:06
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Pregunta Crear documento Word a partir de una base de datos

Hola!

Me gustaría saber si es posible generar un documento word a partir de una base de datos.Me explico:tengo una pagina web en la que aparece un hiperenlace(a href="examenes.doc") llamado "examenes",entonces lo que quiero es que cuando se pinche sobre ese hiperenlace se abra un documento en formato Word y cuyo contenido sea el de una base de datos queyo indique.Además,tamién me gustaría que luego dicho documento se pudiera volver a subir al servidor.Gracias por adelantado

Saludos
  #2 (permalink)  
Antiguo 24/10/2005, 05:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Desde PHP puedes generar formato RTF (que lo lee Word y tiene formato) .. eso lo tendrá que hacer un script tuyo PHP .. por ende el "código" del link sería algo tipo:

<a href="genera_doc.php">ver ducomento</a>

Tu genera_doc.php .. podrías ayudarte de la classe:
http://www.phpclasses.org/browse/package/1805.html

Con esa classe en función de tus datos generas tu documento RTF desde datos de tu BD dandole el formato que corresponda.


Un saludo,
  #3 (permalink)  
Antiguo 24/10/2005, 08:58
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 5 meses
Puntos: 0
Que tal,

Otra solución que yo mismo he probado y va muy bien:

http://www.forosdelweb.com/f18/generando-archivos-rtf-con-php-308058/
  #4 (permalink)  
Antiguo 28/10/2005, 04:14
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Generar documentos RTF(con word) en PHP

Hola a todos!

Me gustaría saber cómo se puede generar un documento de Word RTF en php cuyo contenido sea el que está almacenado en una base de datos.He estado buscando por todos lados y no he encontrado nada.Espero que alguien me pueda ayudar.Gracias por adelantado

Saludos
  #5 (permalink)  
Antiguo 28/10/2005, 06:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
No entiendo por qué repites tus mensajes (tampoco por qué la mayoría de veces que obtienes respuestas, no te pasas a dar un "gracias" o "no me sirvió" o "no entiendo tal cosa" .. pero bueno .. eso es otro tema)

No sé si no te gustaron las propuestas que aquí se te dieron .... pero será mejor que intentes probarlas y expliques si no es lo que necesitas .. o no sabes usarlas .. o que pasa en concreto, pero abrir un nuevo tema "como si no hubiera pasado nada" no me parece correcto .. nos haces perder el tiempo respondiendote lo miso que tal vez ya has leido. Por tu bien, ... insiste en tus temas abiertos.

Un saludo,
  #6 (permalink)  
Antiguo 28/10/2005, 07:53
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 5 meses
Puntos: 0
Que tal Robandrox,

En el link que te he pasado está todo el script listo para que lo utilices, si lee el artículo al que hace referencia, mira el codigo y aunque no lo entinedas totalmente verás la lógica con que fué construido y que es bastante configurable.

Tomate tu tiempo ya que como se pegó el codigo en el post ya no tienes necesidad ni de digitarlo siquiera.

Como dice Cluster, "ponte juicioso" así te salgan 100 errores si es del caso se te guiará y verás que así aprendes poco a poco.

Saludos.
  #7 (permalink)  
Antiguo 30/10/2005, 10:50
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Muchas gracias a todos los que me habeis contestado.

En cuanto a tí,CLUSTER,he de decirte que si a veces repito los temas es porque a lo mejor la primera vez no contesta nadie y entonces si no lo vuelvo a exponer para que aparezca en la primera página pues la gente no se molesta en leer temas muy atrasados.Otras veces no digo nada(me ha servido,no me ha servido,no entiendo esto)porque lo leo pero no me da tiempo a probarlo.De todas maneras,no te preocupes que intentaré hacer lo que me dices.Ah,las gracias las doy por adelantado SIEMPRE.

Saludos
  #8 (permalink)  
Antiguo 30/10/2005, 11:07
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Ah,se me olvidaba!!.El código todavía no he podido probarlo.Si puedo probarlo esta noche ya os cuento.

Saludos
  #9 (permalink)  
Antiguo 31/10/2005, 07:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
En cuanto a tí,CLUSTER,he de decirte que si a veces repito los temas es porque a lo mejor la primera vez no contesta nadie y entonces si no lo vuelvo a exponer para que aparezca en la primera página pues la gente no se molesta en leer temas muy atrasados.
Si tu o quien sea contesta tus mensajes, .. el tema sube a las primeras posiciones del foro. Por eso se recomienda insistir en tus temas abiertos, aportando en el mismo mensaje más información al respecto.

Cita:
Otras veces no digo nada(me ha servido,no me ha servido,no entiendo esto)porque lo leo pero no me da tiempo a probarlo.De todas maneras,no te preocupes que intentaré hacer lo que me dices.
Bueno .. por eso mismo no está de más decir "Lo estoy probando . .cuando pueda les aviso como me fué" .. así nos esperamos sin problemas.

Cita:
Ah,las gracias las doy por adelantado SIEMPRE.
El tema de dar o no las gracias, una vez seguido los consejos que te puedan haber dado, no es más que para dar un "cierre virtual" al tema .. saber que lo que te indicaron fué tu solución o que todavía sigues buscando solución al respecto. Esto no es para beneficio tuyo sino para otro usuario que pueda leer tu mensaje en el foro donde tenga un problema similar.

Todos estos consejos los puedes ver aquí (por si quieres verlo):
http://www.forosdelweb.com/f18/como-preguntar-foro-php-cosas-tener-cuenta-295415/

Un saludo,
  #10 (permalink)  
Antiguo 31/10/2005, 07:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Iniciado por robandrox
Ah,se me olvidaba!!.El código todavía no he podido probarlo.Si puedo probarlo esta noche ya os cuento.

Saludos
Ok, .. esperamos tus comentarios.

Un saludo,
  #11 (permalink)  
Antiguo 31/10/2005, 14:59
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Ya estoy otra vez dando la lata!!

Os cuento:el enlace que se me pasa en el que aparece un código para generar documentos RTF no lo he probado porque no lo entiendo muy bien y además he encontrado en un libro un código que me parece bastante mas sencillo.El problema es que al abrir el documento me sale un mónton de cosas raras.Os paso el código y parte del documento haber si me podeis ayudar
Nota:Este código no saca datos de una base de datos como yo quiero,pero sería cuestión de introducir las sentencias coorespondientes.De momento me interesa que funcione lo que os paso.
Gracias

Código PHP:
<?php

$name
=$_POST['name'];//variables recibidas de un formulario
$score=$_POST['score'];

//Comprobamos que disponemos de los parámetros necesarios

if(!$name || !$score)
{
    echo 
"<h2>Error:</h2>Esta página fue llamada incorrectamente<br>";
}else{

    
//Generamos los encabezados para que el navegador seleccione la aplicación correcta

    
header('Content-type: application/msword');
    
header('Content-Disposition: inline; filename=cert.rtf');

    
$date=date('F d, Y');

    
//Abrimos el archivo de plantilla

    
$filename="plantilla.rtf";
    
$output=file_get_contents($filename);

    
//Sustituimos los marcadores de posición en la plantilla por los datos

    
$output=str_replace('<<NAME>>'strtoupper($name), $output);
    
$output=str_replace('<<Name>>',$name,$output);
    
$output=str_replace('<<score>>',$score,$output);
    
$output=str_replace('<<mm/dd/yyyy>>',$date,$output);

    
//Enviamos el documento generado al navegador
    
echo $output;
}

?>
Y lo que me sale es lo siguiente:

{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshf loch0\stshfhich0\stshfbi0\deflang3082\deflangfe308 2{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f121\froman\fcharset238\fprq2 Times New Roman CE;} {\f122\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f124\froman\fcharset161\fprq2 Times New Roman Greek;}{\f125\froman\fcharset162\fprq2 Times New Roman Tur;}{\f126\froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\f127\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f128\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f129\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0 \green0\blue255;\red0\green255\blue255; \red0\green255\blue0;\red255\green0\blue255;\red25 5\green0\blue0;\red255\green255\blue0;\red255\gree n255\blue255;\red0\green0\blue128;\red0\green128\b lue128;\red0\green128\blue0;\red128\green0\blue128 ;\red128\green0\blue0;\red128\green128\blue0;


y continua......
  #12 (permalink)  
Antiguo 31/10/2005, 18:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Ese "montón" de cosas raras que dices no es más ni menos que el formato RTF de tu documento .. lo que sucede es que tu navegador no está interpretando correctamente las cabeceras HTTP que se le indica en el código vía Header() de que el tipo de dato que se le está enviando debe asociarlo a MS Word (del office, o visor de ese tipo de archivos) .. No sé si en el navegador/PC de pruebas tienes instalado MS Word o algún visor de RTF's ...?

Un saludo,
  #13 (permalink)  
Antiguo 01/11/2005, 03:53
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Hola de nuevo!!

Finalmente he optado por probar el codigo que me pasó "sofia me gusta" ya que casi lo entiendo en su totalidad,sólo que he hecho unas pequeñas modificaciones,porque yo no quiero que sustituya nada en la plantilla,sino que directamente escriba el fichero con los datos obtenidos de la base de datos.El problema es que me sale "codigo rtf".

El código es:
Código PHP:

<?php



function leef($fichero){

    
$texto=file($fichero);
    
$tamleef=sizeof($texto);
    for(
$n=0;$n<$tamleef;$n++){$todo=$todo.$texto[$n];}

    return 
$todo;
    }


//Funcion que genera un RTF
function rtf($sql,$plantilla,$fsalida)
{

    
$pre=time();
    
$fslaida="/rtf/".$pre.$fsalida;
    
$conexion=mysql_connect();
    
//Paso nº1:Leo la plantilla
    
$txtplantilla=leef($fichero);
    
//echo $txtplantilla;
    //Paso nº2:Saco cabecera,el cuerpo y el final
    
$matriz=explode("sectd",$txtplantilla);
    
$cabecera=$matriz[0];//."sectd";
    
$inicio=strlen($cabecera);
    
$final=strrpos($txtplantilla,"}");
    
$largo=$final-$inicio;
    
$cuerpo=substr($txtplantilla,$inicio,$final);
    
//Paso nº3:escribo el fichero
    
$punt=fopen($fsalida,"w");
    
fputs($punt,$cabecera);
    
$seleccion=mysql_select_db("base",$conexion);
    
$result=mysql_query($sql);
    while(
$row=mysql_fetch_array($result,MYSQL_NUM))
    {

        foreach(
$row as $valor)
        {

            
fputs($punt,$valor);
        }
    
$saltopag="\par \page \par";
    echo 
"<br>";
    
fputs($punt,$saltopag);
    }
    
//fputs($punt,"}");
    
fclose($punt);
    return 
$fsalida;
}
     
$fichero="mifichero.rtf";
      
$sql="SELECT * FROM usuario";
    
$salida=rtf($sql,$fichero,"certificado.rtf");
    
$salida="<a href='$salida'>Obtner</a>";
    echo 
"<p>$salida</p>";

?>
y al probarlo me sale:

JoseAlicante\par \page \parAndreaAlicante\par \page \parMariaElche\par \page \par

donde los nombres y las ciudades es lo que tengo almacenado en la base de datos.
Espero que alguien me pueda ayudar(el editor MS Word si que lo tengo,Cluster)
  #14 (permalink)  
Antiguo 01/11/2005, 10:56
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Otra vez aquí!!

Haber,si al script anterior le quito las líneas siguientes:
Código PHP:
$saltopag="\par \page \par";
echo 
"<br>";
fputs($punt,$saltopag); 
entonces los datos aparecen tal que así:

JoseAlicanteAndreaAlicanteMariaElche

pero claro,como hago para que cada nombre y ciudad aparezca en una línea nueva,que es lo que pretendo??

Espero que alguien me pueda ayudar porque estoy desesperado.Gracias

Saludos
  #15 (permalink)  
Antiguo 02/11/2005, 06:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Desconozco el formato RTF .. pero te puedo asegurar que <br> es un salto de línea para HTML no para RTF.

Ahí dice algo como que "\par \page \par" todo eso es un salto de línea (o de pagina también? ..) .. Revisa el formato RTF (usa google .. por algún sitio saldrá).

Un saludo,
  #16 (permalink)  
Antiguo 02/11/2005, 08:12
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 5 meses
Puntos: 0
Robandox, ahí cambian muchas cosas............lo que hae este code es que lee en bajo nivel un documento rtf y luego concatena los datos donde has puesto esos marcadores de Datos.

Si necesitas crear el docuemnto de word al 100% dinámico sin estar basados en una plantilla, puedes chequear este otro ejemplo:

http://www.programacionweb.net/artic...ticulo/?num=63


Igualemente revisa lo que te menciona Cluister, utiliza el buscador del foro, etc, de igual manera puedes exponer a modo general la interacción que requieres con docuemtnos de word para ver si lo planteado es lo que realemnte necesitas.

Saludos.
  #17 (permalink)  
Antiguo 03/11/2005, 13:11
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Que tal?

Gracias por contestarme

Sofia me gusta,no entiendo por qué dices que mi script es totalmente diferente al que me pasaste.Lo único que he hecho ha sido incorporarl os datos de una base de datos y ya está,incluso es mas sencillo,porque no he sistituido nada,no??A lo mejor es que no lo estoy haciendo como debiera,no se

Lo unico que quiero es crear documentos con formato RTF a partir de una base de datos con sus correspondientes saltos de linea,etc.Los datos los escribe en el archivo sin mayor problema,el problema viene cuando quiero por ejemplo que cada dato me salga en una linea diferente.Parece que en mi script si que hace los saltos de linea pero a la vex también me incluye el código RTF¿?Esto es lo que no se hacer.No entiendo por qué a ti(sofia....) si que te funciona cuando pones "\ par \page \par".

Espero que me puedan ayudar.Gracias

Saludos
  #18 (permalink)  
Antiguo 03/11/2005, 17:01
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 5 meses
Puntos: 0
Que tal,

Según lo que yo entiendo el "\ par \page \par" es para que se salte la página cuando el tamaño ya no alcanza, es decir para avisarle a la plantilla rtf que se debe estirar.

En principio has de tener un docuemnto rtf base.

Diséñalo como quieras (Incluso conserva fuentes, tablas, gráficos insertados, saltos de línea)

No acabo de entender el "salto" que quieres insertar.

porque si quieres mostrar por ejemplo:

Nombre
Ciudad
País

Pues simplemente insertas en la plantilla rtf los "marcadores de datos" con esos mismos espacios de línea:

#*Nombre*#
#*Ciudad*#
#*Pais*#

O como los hayas nombrado.


Cualquier cosa chequea la especificación rft:

http://www.biblioscape.com/rtf15_spec.htm
  #19 (permalink)  
Antiguo 05/11/2005, 12:57
 
Fecha de Ingreso: abril-2005
Mensajes: 287
Antigüedad: 18 años, 11 meses
Puntos: 0
Buenas

El problema ya lo tengo solucionado.Como yo quería crear documentos 100% dinámicos,lo único que había que hacer era incluir una cabeceras:

Código PHP:
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=archo.rtf"); 
Asi funciona al pelo y es mucho mas sencillo que lo que o pretendia hacerlo.

Muchas gracias a todos los que me habeis ayudado

Salu2
  #20 (permalink)  
Antiguo 10/11/2005, 14:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 10
Antigüedad: 18 años, 4 meses
Puntos: 0
Yo tengo el mismo problema y se ve muy sencillo el código que acabas de colocar pero lo en este momento lo puse y no me ha funcionado... si no es mucha molestia me podrías decir en dónde lo tienes que colocar?
  #21 (permalink)  
Antiguo 28/09/2006, 10:41
(Desactivado)
 
Fecha de Ingreso: septiembre-2006
Mensajes: 1
Antigüedad: 17 años, 6 meses
Puntos: 0
como crear el documento cuando se tienen imagenes en el?

Hola excelnte codigo ya lo probe y funciona de maravilla, el unico inconveniente que he tenido es que no me crea docuemntos cuando hay imagenes en el.. como puedo solucionar esto?
Saludos,

Cita:
Iniciado por SOFIA_ME_GUSTA Ver Mensaje
Que tal Robandrox,

En el link que te he pasado está todo el script listo para que lo utilices, si lee el artículo al que hace referencia, mira el codigo y aunque no lo entinedas totalmente verás la lógica con que fué construido y que es bastante configurable.

Tomate tu tiempo ya que como se pegó el codigo en el post ya no tienes necesidad ni de digitarlo siquiera.

Como dice Cluster, "ponte juicioso" así te salgan 100 errores si es del caso se te guiará y verás que así aprendes poco a poco.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:19.