Форум » GUI » Элемент управления "Электронная таблица" » Ответить

Элемент управления "Электронная таблица"

Dr. Oldwarez: Вот такая проблема: нужно к каждой строке добавить произвольное MEMO-поле, которое показывает алгоритм расчёта цены. Её рассчитывают по-разному, поэтому классическая таблица с фиксированной структурой здесь не рулит. Далее, и это самое интересное: эта таблица должна уметь считать, как настоящая электронная таблица Excel, или Lotus wks, wk1 и т.д. Если использовать OleExcel, то во-первых, для многотысячной таблицы цен на каждую строку выводить по таблице калькуляции - это чересчур. Во-вторых, шеф не хочет Excel, а хочет Openoffice. В третьих, элемент управления должен выводиться, как обычное MEMO, в окне с прочими BROWSE и MEMO. По крайней мере в Qt есть такой себе QTableWidget, где есть именно то, что мне нужно. QTableWidget

Ответов - 6

Dr. Oldwarez: Так, ничего не нашёл. Пока что тупо поставил MEMO-поле, которое ничего не считает.

Pasha: Dr. Oldwarez пишет: Вот такая проблема: нужно к каждой строке добавить произвольное MEMO-поле, которое показывает алгоритм расчёта цены. Её рассчитывают по-разному, поэтому классическая таблица с фиксированной структурой здесь не рулит. Далее, и это самое интересное: эта таблица должна уметь считать, как настоящая электронная таблица Excel, или Lotus wks, wk1 и т.д. Если использовать OleExcel, то во-первых, для многотысячной таблицы цен на каждую строку выводить по таблице калькуляции - это чересчур. Во-вторых, шеф не хочет Excel, а хочет Openoffice. В третьих, элемент управления должен выводиться, как обычное MEMO, в окне с прочими BROWSE и MEMO. Я на прошлой неделе делал нечто подобное. Конечно, задача не точно такая же, но похожая. Имеем множество колонок (полей), для которых можно установить формулы. Сделал таблицу формул: код и сама формула. В формулах вместо имен полей завел их алиасы, и при написании формулы - выбор из алиасов колонок. Для каждого поля из множества добавил дополнительное поле - код формулы для этой ячейки. Сделал пометку множества строк для задания формулы для помеченной области. Отображение формулы - в статус строке, клик на статус строку - задание формулы. После редакции какой-либо ячейки - вызов расчета для всех заданных формул этой строки обычной макроподстановкой с заменой алиасов на имена полей. Все это без всяких экселей и прочих офисов, в обычном бровсе/гриде.

petr707: Простой вариант: a) memо поле(mem_field) является кодом Harbour , например 100*a+b , где {a,b} видимые переменные(поля) б) расчет цены(cena_field) проводится по кнопке прикладного ПО - для всех строк или одной Cena_field := eval( compile(mem_field)) или просто eval( compile(mem_field)) для формулы внутри memo cena_field := 100*a+b ... Function COMPILE(x) Local ret ret:= &("{||"+x+"}") return ret


Dr. Oldwarez: Там куда более сложная и разнообразная структура и в функцию EVAL её не загонишь, тем паче что в этом же поле должны быть и тексты пояснения. Тут именно что электронная таблица нужна. Ведь цена в разных случаях рассчитывается по-разному. И число исходных данных и формула - одна непохожа на другую. Так что остаётся только ждать, пока Qt нормально прикрутят к Харбору.

Pasha: Dr. Oldwarez пишет: Там куда более сложная и разнообразная структура и в функцию EVAL её не загонишь, тем паче что в этом же поле должны быть и тексты пояснения. Тут именно что электронная таблица нужна. Ведь цена в разных случаях рассчитывается по-разному. И число исходных данных и формула - одна непохожа на другую. Так что остаётся только ждать, пока Qt нормально прикрутят к Харбору. Ждать - это не наш метод. Тем, кто ложится спать, спокойного сна. Ну а те, кому нечего ждать, отправляются в путь. Их не догнать, уже не догнать (ц) Если алгоритм выходит за рамки обычного макровыражения, можно использовать hrb-модули. Вместо строки-формулы добавить в таблицу формул 2 мемо поля: одно из них с функцией расчета, второе - с откомпилированным вариантом этой функции. После ввода функции копировать ее во временный файл, компилировать вызовом harbour с параметром -gh, и сохранять в мемо-поле. Имя функции должно быть уникальным. Эти функции загружать обычными средствами hrb, и выполнять ими же. Правда, написание таких функций выходит за рамки возможностей обычного юзера. Но и написание vba-скриптов тоже выходит за эти рамки, так шта...

Andrey: Pasha пишет: Ждать - это не наш метод. 5 балов !



полная версия страницы