Выражение формулы Excel на Java (десятичная интерпретация во времени)
Вопрос
Я конвертирую формулу листа Excel в java, но я не могу понять, как Excel удается выполнять следующее:0.22 Применяет формулу:=ТЕКСТ(R5/14, "h:мм") и каким - то образом приходит к:0.22
Опять же, если я предоставлю:2.8 он достигает 4.48 Может кто-нибудь, пожалуйста, объяснить мне, как это делается.Я немного прочитал о десятичной системе счисления и понимаю преобразование, но это пока не помогло объяснить вышесказанное.
Решение
Excel хранит значения даты и времени следующим образом:
- Число слева от десятичной дроби представляет количество дней, прошедших с 1 января 1900 года
- Число справа от десятичной дроби представляет собой дробную часть 24-часового рабочего дня
В вашем примере вы преобразуете десятичную дробь в текстовое представление часовой и минутной частей значения datetime.
Прорабатываем вашу первую формулу, 0,22 делим на 14 (зачем вы это делаете?) равняется 0,015714286.Если затем применить эту дробь к 24-часовому рабочему дню (умножить на 1440 минут), то получится 22 минуты с некоторыми изменениями (т.е."0:22").
Работая по вашей второй формуле, 2,8, деленное на 14, равно 0,2.Умноженное на 1440, оно равно 288 минутам, что составляет 4 часа 48 минут (т.е."4:48").
Другие советы
Или компилятор формул Abacus для Java, который позволяет вам компилировать формулы в таблицах Excel вплоть до байтового кода Java для быстрого и удобного вызова из ваших Java-приложений (может компилироваться во время выполнения без JDK).
Да, это немного бестолково.Достаньте / 14, и это поможет.По сути, 1 = 1 день, поэтому R5 выражается в 14 долях дня.Вероятно, вы могли бы сделать
int msInADay= 86400000;
Time value = new Time(R5/14 * msInADay);
но это непроверено.
Спасибо Криденсу.
Это работает с:двойное r = 0,22;двойное время в пути = (r / 14) * 1440;
Очень хорошую документацию по внутренним электронным таблицам можно найти в спецификации OpenFormula (которая документирует / определяет OpenOffice-Calc).
http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula
Если вы ищете Java-библиотеку для вычисления формул Excel, вам может пригодиться Apache-POI или LibFormula от Pentaho:
ЛибФормула: http://sourceforge.net/project/showfiles.php?group_id=51669&package_id=213669