Expresando la fórmula de Excel en Java (interpretación decimal a tiempo)
Pregunta
Estoy convirtiendo una fórmula de hoja de Excel a Java, pero no puedo entender cómo Excel logra tomar lo siguiente: 0.22 Aplica una fórmula: = TEXTO (R5 / 14, "h: mm") y de alguna manera llega a: 0.22
Nuevamente si proporciono: 2.8 llega a las 4.48 ¿Puede alguien explicarme cómo hace esto? He leído un poco sobre el decimal y entiendo la conversión, pero esto aún no ha ayudado a explicar lo anterior.
Solución
Excel almacena valores de fecha y hora como:
- El número a la izquierda del decimal representa el número de días desde el 1 de enero de 1900
- El número a la derecha del decimal representa la porción fraccional de un día de 24 horas
En su ejemplo, está convirtiendo un decimal en una representación textual de las porciones de hora y minutos del valor de fecha y hora.
Trabajando en tu primera fórmula, 0.22 dividido por 14 (¿por qué haces esto?) es igual a 0.015714286. Si luego aplica esta fracción contra un día de 24 horas (multiplique por 1440 minutos), es igual a 22 minutos y algún cambio (es decir, `` 0: 22 '').
Trabajando a través de su segunda fórmula, 2.8 dividido por 14 es igual a 0.2. Multiplicado por 1440, equivale a 288 minutos, que son 4 horas y 48 minutos (es decir, `` 4: 48 '').
Otros consejos
O el Abacus Formula Compiler para Java, que le permite compilar las fórmulas en hojas de Excel hasta el código de bytes de Java para llamadas rápidas y fáciles desde sus aplicaciones Java (puede compilar en tiempo de ejecución sin el JDK).
Sí, es un poco tonto. Saca el / 14 y eso ayuda. Básicamente 1 = 1 día, por lo que R5 se expresa en 14 de un día. Probablemente podrías hacer
int msInADay= 86400000;
Time value = new Time(R5/14 * msInADay);
pero no ha sido probado.
Gracias Creedence.
Funciona con: doble r = 0.22; double driveTime = (r / 14) * 1440;
Se puede encontrar una muy buena documentación de las hojas de cálculo internas en la especificación de OpenFormula (que documenta / define OpenOffice-Calc).
http://www.oasis-open.org /committees/documents.php?wg_abbrev=office-formula
Si busca una biblioteca Java para evaluar las fórmulas de Excel, Apache-POI o LibFormula de Pentaho pueden ser útiles:
LibFormula: http://sourceforge.net/project/showfiles.php ? group_id = 51669 & amp; package_id = 213669