Foros del Web » Programando para Internet » PHP »

Reportes de PHP a StarOffice

Estas en el tema de Reportes de PHP a StarOffice en el foro de PHP en Foros del Web. Buenas Tardes, en la empresa donde trabajo usan staroffice. El problema q tengo q al generar un reporte como lo hacia antes a la hora ...
  #1 (permalink)  
Antiguo 01/06/2006, 08:10
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Reportes de PHP a StarOffice

Buenas Tardes,
en la empresa donde trabajo usan staroffice.
El problema q tengo q al generar un reporte como lo hacia antes a la hora de abrirlo me lo abre con el write (viene a ser el word) ya q su contenido es HTML.
Mi codigo es el siguiente:
Código PHP:
//////////////////////////////////////////////////////////////
///////////////// Resultats dels Totals //////////////////////

////////////////////////////////////////////////////////////////////
//Si les dates son iguals evitem el between
////////////////////////////////////////////////////////////////////
if ($datadesde==$datahasta){
    
$cons " AND fecha =".$datadesde."";        
}else{
    
$cons " AND fecha BETWEEN ".$datadesde." AND ".$datahasta."";
}
////////////////////////////////////////////////////////////////////
//mirem les hores
$hor " AND horaini >= '".$horadesde."' AND horafin <='".$horahasta."'";
////////////////////////////////////////////////////////////////////
//consulta per saber els minuts q hi ha entre varios dies
////////////////////////////////////////////////////////////////////
$sql_minuts "SELECT fecha, min(horaini) as horamin, max(horaini) as horamax        
               FROM tickets 
               WHERE tienda="
.$id_tenda." ".$cons." ".$hor."
               AND tickets.anulat=0
               GROUP BY tienda,fecha
               ORDER BY horaini"
;            
$res_minuts=mysql_query($sql_minuts);
$totalminuts=0;
while(
$row_minuts=mysql_fetch_array($res_minuts))
{
    
//Buscarem la hora maxima i la hora minima per saber la mitja de clients
    
$horainici=explode(':',$row_minuts["horamin"]);
    
$horafinal=explode(':',$row_minuts["horamax"]);
    
$horaini=$horainici[0].":".$horainici[1];
    
$horafin=$horafinal[0].":".$horafinal[1];
    
//cridem la funcio perque ens retorni els minuts
    
$minuts temps($horafin,$horaini);    
    
//ens retorna els minuts q hi ha entre la 1era venda i la ultima hora
    
$totalminuts=$totalminuts+$minuts;    
}
////////////////////////////////////////////////////////////
$sql "SELECT sum(total) as total,count(numero) as clients
        FROM tickets 
        WHERE tienda="
.$id_tenda." ".$cons." ".$hor."
        AND tickets.anulat=0
        GROUP BY tienda
        ORDER BY horaini"
;
$res=mysql_query($sql);
$numeroRegistros=mysql_num_rows($res);
if(
$numeroRegistros>0)
{
    
$row=mysql_fetch_array($res);
    
///////////////////////////////////////
    //Consulta per saber el nom de la tenda
    ///////////////////////////////////////
    
$sql_tenda="Select * from tendes where id_tenda=".$id_tenda;
    
$res_tenda=mysql_query($sql_tenda);
    
$reg_tenda=mysql_fetch_array($res_tenda);
    
$tenda=$reg_tenda["tendes"];
    
///////////////////////////////////////
    //Mostrar les dades de La Panera
    ///////////////////////////////////////
    
$shtml="<div align='center' size='1'>";
    
$shtml.= "<b>La Panera del Pà S.L.U. - B60247053<br>";
    
///////////////////////////////////////
    //si posa la mateixa data
    ///////////////////////////////////////
    
if ($datadesde==$datahasta){
        
$shtml.= "$tenda<br>";
        
$shtml.="Dia $fechadesde<br>";
    }else{
        
$shtml.="$tenda<br>";
        
$shtml.="Entre les Dates $fechadesde i $fechahasta<br>";
    }
    
///////////////////////////////////////
    //Posem les hores
    ///////////////////////////////////////
    
$hi=explode(':',$horadesde);
    
$hf=explode(':',$horahasta);
    
$ini=$hi[0].":".$hi[1];
    
$fin=$hf[0].":".$hf[1];
    
$shtml.="Entre les hores $ini i $fin";
    
$shtml.="</div>";
    
$shtml.="<br>";
    
//Facturacio Total
    
$total=$row[total];
    
//Li donem format al numero xq kedi bunic
    
$total=number_format($total,2,',','.');
    
//Numero de clients
    
$clients=$row[clients];
    
//Li donem format al numero xq kedi bunic
    
$clients2=number_format($clients,0,',','.');
    
//tenim els clients, tenim el minuts i sabem pasar de minuts a hores
    //ja hu tenim tot x fer el calcul per saber els clients per hora
    
$calcul=($clients/$totalminuts)*60;
    
//Li donem format al numero xq kedi bunic
    
$clientshora=number_format($calcul,1,',','.');
    
$shtml.="<div align='center' size='1'>";
    
$shtml.="<b>Facturació: $total € ";
    
$shtml.="  |  ";
    
$shtml.="Clients : $clients2";
    
$shtml.="  |  ";
    
$shtml.="Clients/hora : $clientshora";
    
$shtml.="</div>";
    
$shtml.="<br>";
}
///////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
/////////////// Resultats per dia i hora /////////////////////
//////////////////////////////////////////////////////////////

$shtml.= "<table border=\"1\" align=\"center\" bgcolor=\"#EFEFEF\">";
$shtml.="<tr><td align=\"center\">&nbsp;</td>";

$str="SELECT DISTINCT fecha FROM tickets 
      WHERE fecha >="
.$datadesde." AND fecha <=".$datahasta."
      AND tienda="
.$id_tenda."
      ORDER BY fecha ASC"
;
$res=mysql_query($str) or die(mysql_error());
$nreg=mysql_num_rows($res);
if (
$nreg 0){
///////////////////////////////////////////////////////////
//Mostrem La capcelera dels dies
///////////////////////////////////////////////////////////
while($row=mysql_fetch_array($res))
{
    
$data=$row['fecha'];
    
$any=substr($data,0,4);
    
$mes=substr($data,4,2);
    
$dia=substr($data,6,2);
    
$data=$dia."/".$mes."/".$any;
    
$shtml.="<td align='center' colspan='2'><strong>$data</strong></td>";
}
$shtml.="</tr>";
///////////////////////////////////////////////////////////
//Bucle per posar F de Facturacio i C de clients
///////////////////////////////////////////////////////////
$shtml.= "<tr><td align='center'><strong>Hores</strong></td>";
for (
$i=1;$i<=$nreg;$i++){
$shtml.= "<td align='center'>F</td>";
$shtml.= "<td align='center'>C</td>";
}    
$shtml.="</tr>";
///////////////////////////////////////////////////////////
//Seleccionem totes les hores
///////////////////////////////////////////////////////////
$horaini=explode(':',$horadesde);
$horafin=explode(':',$horahasta);
$horai=round($horaini[0]);
$horaf=$horafin[0];
for (
$i=$horai;$i<$horaf;$i++){
$y=$i+1;
$shtml.= "<tr>";
$shtml.= "<td align='center'><strong>".$i."-".$y."</strong></td>";
///////////////////////////////////////////////////////////
//Total Facturacio i Clients per dia i hora
///////////////////////////////////////////////////////////
//Consulta per treure les dates
$str_data="SELECT DISTINCT fecha FROM tickets 
      WHERE fecha >="
.$datadesde." AND fecha <=".$datahasta." AND tienda=".$id_tenda."
      AND tickets.anulat=0
      ORDER BY fecha ASC"
;
$res_data=mysql_query($str_data) or die(mysql_error());
$nreg_data=mysql_num_rows($res_data);
if (
$nreg_data 0){
    
///////////////////////////////////////////////////////////
    //Montem les Hores per fer la consulta
    ///////////////////////////////////////////////////////////
    
if ($i 9){
        
$horainicial=$i.":00";
    }else{
        
$horainicial="0".$i.":00";
    }
    if (
$y 9){
        
$horafinal=$y.":00";
    }else{
        
$horafinal="0".$y.":00";
    }
    while(
$row_data=mysql_fetch_array($res_data))
    {
    
///////////////////////////////////////////////////////////
    //Consulta per treure el total Facturat i clients
    ///////////////////////////////////////////////////////////
    
$str_total="SELECT sum(total) as total, count(numero) as clients FROM tickets 
      WHERE fecha ="
.$row_data[fecha]." AND horaini >= '".$horainicial."' 
      AND tickets.anulat=0
      AND horafin <= '"
.$horafinal."' AND tienda=".$id_tenda;
    
$res_total=mysql_query($str_total) or die(mysql_error());
    
$nreg_total=mysql_num_rows($res_total);
        if (
$nreg_total 0){
            
$row_total=mysql_fetch_array($res_total);            
            
$total=$row_total[total];
            if (
$total==""){
                
$total=0;
            }
            
$clients=$row_total[clients];
            if (
$clients==""){
                
$clients=0;
            }
            
$shtml.= "<td align='right'>".$total."</td>";
            
$shtml.= "<td align='right'>".$clients."</td>";            
        }
//fi IF total
    
}//fi WHILE
}//fi IF data
$shtml.= "</tr>";
}
//fi FOR
}//fi si hi ha reg o no
$shtml.="</table>"
$scarpeta="excel/"
$dadespanera=$scarpeta."dades.ods"//ruta del archivo a generar  
$fp=fopen($dadespanera,"w");  
fwrite($fp,$shtml);  
fclose($fp); 
da igual con la extension q cree el archivo: xls o ods los dos me lo abre con el write.
Supongo q hace eso porque hay html en la pagina.
Como puedo crear un report en excel sin q haya html? puedo pasar los campos a las columans y filas directamente?
si es asi donde puedo encontrar informacion?

Muchas gracias de antemano,

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #2 (permalink)  
Antiguo 02/06/2006, 00:23
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
buenos dias.
Alguna idea?
Ser q el codigo q he puesto es un poko extenso pero es solo para llenar la tabla q estoy creando.
Lo qme interesa solamente es como puedo crear un xls o un ods pero llenando solo las columnas, sin tener q usar una tabla html!

gracias de antemano!

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #3 (permalink)  
Antiguo 02/06/2006, 00:40
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 20 años, 1 mes
Puntos: 78
Aca tienes algunos articulos que te ayudaran

http://www.programacion.com/blogs/15...iante_php.html


http://www.programacionweb.net/artic...iculo/?num=155
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #4 (permalink)  
Antiguo 02/06/2006, 00:58
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Muy buenas! me sigue pasando lo mismo!!! si tiene contenido HTML me lo abre con el witer (word en office).

Alguna idea mas?

Saludos y gracias
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #5 (permalink)  
Antiguo 02/06/2006, 01:45
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 20 años, 1 mes
Puntos: 78
Intenta usar los headers apropiados para Staroffice y no los de excel del ejemplo :)
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #6 (permalink)  
Antiguo 02/06/2006, 02:05
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
ese es el problema... q no las encuentro en ningun sitio...
supongo q alguien se habra encontrado en una situacion parecida... no?
o soy yo el unico en este mundo q usa staroffice? o en todo caso openoffice?
el unico q he encontrado es el siguiente:
Código PHP:
header("Content-type: application/vnd.sun.xml.calc"); 
header("Content-Disposition: attachment; filename=miarxivo.ods"); 
gracias de antemano
saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 02/06/2006 a las 02:40
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




La zona horaria es GMT -6. Ahora son las 11:20.