|
|
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! На работе пишу программу для создания отчётных форм. Возник очень интересный вопрос: Как организовать многоуровневые расчёты. Т.е. Оператор заполняет первоначальный набор данных, затем из этих данных по формулам считаются ещё какие-то данные, затем эти данные заполняются в следующие поля, из этих полей считаются следующие данные и тд. как в excel.(по гуглил ответов пока разумных не нашёл). Что важно: глубина и ширина расчётов не ограничена, набор данных может меняться часто и изменять певоначальный набор (состоит из 300-500 значений) вручную, достаточно муторное занятие. Когда это было организованно на windows приложении, там не особо заморачивались и сделали просто повторение несколько раз до полного пересчёта. Сейчас я хотел воспользоваться для этой проблемы xls файлом с формулами, который просчитает мне всё, а я просто забиру готовые данные. У этого способа есть + и - +Файл могу формировать не я а любой экономист -скорость работы (phpexcel как-то долго работает, может правда я как-то не правильно делаю) Подскажите как лучше сделать? Возможно кто-то знает алгоритм таких расчётов? Возможно Библиотеку кто хорошую подскажет. Заранее спасибо! P.S. Всегда было интересно как считает excel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2012, 13:37:56 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
Опять забыл LAMP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2012, 13:38:42 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
MIchPl, вы хотите онлайн эксель ? может на яваскрипте лучше считать, а на РНР уже генерить отчет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2012, 18:00:19 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
artas, Ну да идея примерно такая) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 06:14:26 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
Вот я добрался до определения содержимого ячейки (10, 10). А ее значение зависит от ячеек (5, 1), (2, 2) и (15, 11). Первые две посчитаны, а третья - нет. Значит требуем сначала ее пересчета. И т.д. Можно рекурсивно (но тогда надо ограничивать глубину). Можно развернуть рекурсию. Не забыть о детективании циклических ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 06:28:48 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
Edd.Dragon, Так то я понял как должно быть. Вот с практической реализацией возникла проблема) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 11:08:18 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
MIchPl, Ну в голову сходу приходит только такой алгоритм : 1) Ячейки где формулы как-то помечаем 2) Исправляя какуето ячейку - пересчитываем все ячейки с формулами 3) Не забываем про то что если формула ссылается на формулу нужно пересчитать в определенном порядке З.Ы. Если вы начинающий, то это довольно сложная задача для начала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 11:20:48 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
artas, Я не совсем начинающий, но времени на реализацию мало... Надеялся, что есть по проще способ! эхххххххх Пока прийдётся всё оставить на xls. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 12:20:23 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
MIchPlEdd.Dragon, Так то я понял как должно быть. Вот с практической реализацией возникла проблема) Написание класса "Ячейка", который содержит набор параметров ячейки: тип содержимого, само содержимое (как есть и вычисленное), массив ссылок на ячейки, от которых зависит, метод getValue() - не проблема. Этот метод возвращает значение. Если оно еще не вычислено - вычисляет. Если это формула ЯчейкаА + Ячейка Б, то и возвращает ЯчейкаА.getValue() + Ячейка Б.getValue(), а они в свою очередь вернут свои значения или обратятся к тем ячейкам, от которых зависят. Все само собой. Куда более трудоемкая задача - синтаксический разбор формул. А просчет листа - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 17:50:11 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
Edd.DragonКуда более трудоемкая задача - синтаксический разбор формул. А просчет листа - нет. Если с 0 писать то да(хотя в любой хрестоматии по С\С++ есть такая задача), а если погуглить то и писать ничего не нужно, т.к. уже есть готовый, отлаженный велик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2012, 11:16:11 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
artasEdd.DragonКуда более трудоемкая задача - синтаксический разбор формул. А просчет листа - нет. Если с 0 писать то да(хотя в любой хрестоматии по С\С++ есть такая задача), а если погуглить то и писать ничего не нужно, т.к. уже есть готовый, отлаженный велик Ну так в качестве отлаженного велика вообще можно взаимодействовать с Офисом через COM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2012, 06:35:23 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
Или с Либрой (не знаю через что) =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2012, 06:35:43 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
Edd.Dragon, мммм, под рукой либреофиса нет. как понимаю open document format существует и для эдектронных таблиц, и он также в xml-формате. вам надо подготовить числовые данные, формулы могут быть в шаблонах. любое открытие файла вызовет пересчет формул и вы получите необходимые данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 23:10:43 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
nexoma, Я так и сделал через PHPExel))). Возможно когда-нибудь сделаю по др., а пока так пусть работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2012, 06:11:24 |
|
||
|
Многоуровневые расчёты
|
|||
|---|---|---|---|
|
#18+
nexomaлюбое открытие файла вызовет пересчет формул и вы получите необходимые данные. по моему это настраивается в Екселе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2012, 10:42:02 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=37829027&tid=1465032]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
620ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 908ms |

| 0 / 0 |
