Curso de PHP
Navegación
Contenido popular
Hoy:
Siempre:
En línea
En este momento hay 0 usuarios y 4 invitados en línea.
Excel y PHP
Enviado por clbustos el Vie, 25/07/2008 - 11:20.
Como utilizar Excel con PHP
- 3123 lecturas
Buscar
Publicidad
Inicio de sesión
Comentarios recientes
- Sí, tienes razón, pero
hace 1 día 18 horas - ummm es un hilo del 2003 y
hace 2 días 37 mins - a mi nom e funciona no se
hace 4 días 2 horas - hola la verdad es muy buena
hace 5 días 5 horas - hola a todos quisiera
hace 1 semana 2 días - Esto es falsisimo, no
hace 1 semana 5 días - hola a todos quisiera k m
hace 2 semanas 1 hora - He estado leyendo toda la
hace 2 semanas 4 días - Muchas gracias por las
hace 4 semanas 2 días - hola sabes q tengo un
hace 4 semanas 4 días

Bueno probé con el Excel nativo y me va muy bien. Bueno luego de manipular algunas líneas referentes a los formatos. Ya que como está solo considera algun os de estos formatos (definidos en $dateFormat y $numberFormat), el caso era que no es lo mismo para todas las personas ni aplicaciones. Comprobé que el formato se registraba en otro lugar (con elementos como GENERAL, @, HH:MM:SS, MM/DD/YYYY, y cosas por el estilo), con una búsqueda probabilistica social defini reglas de transformación de tipos (si el campo es date con el rawValue <= 1 probablemente sea una hora). Da lo mismo como se vea en el archivo xls ya que realmente se almacena con un punto flotante.
Ahora como supondrán con las líneas siguientes el cálculo es algo simple. Demasiado. El problema se origina en el formato de almacenamiento de una fecha. Un día es equivalente a una unidad, por lo que un valor 0,5 en el raw de una determinada casilla se ve en el xls como 12:00:00 (medio día). El problema es que debido a la manipulación de decimales para calcular horas, minutos y segundos estos se calculan con multiplicaciones por 24, 60 y múltiplos. Con lo cual se pierden algunos decimales "poco significativos" para PHP. Haciendo que horas como las 17:00 hrs se vea como 16:59:59. Traté de hacer que me añadiera ese segundo (lo que acarrea el problema de si en realidad el valor es 16:59:59) con los IFs anidados, pero nada. Tambien intenté quitar el floor, pero nada.
¿alguien sabe cómo manipular esos decimales o cómo rescatarles más precisamente desde el xls?
PD: También he intentado con las funciones BC Math.
function createDate($numValue)
...
$rawD = $parteDecimal;
$hours = floor($parteDecimal * 24);
$mins = floor($parteDecimal * 24 * 60) - $hours * 60;
$secs = floor($parteDecimal * SPREADSHEET_EXCEL_READER_MSINADAY) - $hours * 60 * 60 - $mins * 60;
if($secs == 59) {
$mins++;
$secs = 0;
if($mins == 60) {
$hours++;
$mins = 0;
}
}
$stringD = date (AIRVIRO_HOUR_FORMAT , mktime($hours, $mins, $secs));
...
PD: AIRVIRO_HOUR_FORMAT es 'Hi', si el valor de raw es 0,75 entonces imprime 1800. ¡Entiende!
Gracias de antemano.
PD: También les señalo que habia problemas con archivos generados con Gnumeric. Al parecer no aplica bien el formato correspondiente al número de columnas o filas por hoja. Me dio bastantes problemas, ya con OpenOffice o Microsoft Office funciona como debe. Una pena por este ya que es mucho más liviano que el OpenOffice.
Enviar un comentario nuevo