Преобразование формул
Разработчики могут возвращать формулы Microsoft Excel из представлений, хранимых процедур или SQL-запросов.
Например:
SELECT id, name, qty, price, '=@qty*@price' AS amount ...
Продукты SaveToDB преобразуют такие формулы в расчетные формулы, специфичные для каждой платформы (Excel, DataTable или JavaScript).
Надстройка SaveToDB поддерживает практически все формулы Microsoft Excel, в то время как DBEdit, DBGate и ODataDB поддерживают лишь подмножество из них.
Продукты SaveToDB определяют формулы по ячейке первой строки, анализируют формулы в колонке и применяют их либо к колонке, либо к каждой ячейке.
ConvertFormulas и DoNotConvertFormulas
Разработчики могут включать или отключать преобразование формул, используя типы ConvertFormulas и DoNotConvertFormulas в таблице xls.handlers.
Например:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s02 | usp_cashbook5 | balance | ConvertFormulas | ATTRIBUTE | ||||
xls | handlers | HANDLER_CODE | DoNotConvertFormulas | ATTRIBUTE |
Используйте ConvertFormulas для преобразования формул, даже если первая ячейка не содержит формул, как в случае с начальным сальдо в приведенном примере.
Используйте DoNotConvertFormulas для отмены преобразования формул, даже если первая ячейка содержит формулу, как это возможно в поле HANDLER_CODE.
Formula и FormulaValue
Разработчики могут задавать формулы для расчета значений колонок, используя тип Formula и формулы в поле HANDLER_CODE.
Например:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s04 | usp_order_form | amount | Formula | ATTRIBUTE | =@qty*@price | |||
s22 | cashbook | amount | DoNotChange | ATTRIBUTE |
Этот случай аналогичен приведенному во введении.
Однако, запрос возвращает актуальные данные, а не формулы, и сами формулы вставляются после загрузки. Это делает метод применимым и для таблиц.
Также сохраняются все строки, значения формул которых изменились.
Это мощная возможность для пересчета всех значений колонки.
Пример конфигурации также содержит обработчик DoNotChange. Используйте его, чтобы предотвратить ручные изменения.
Вторая возможность — это тип FormulaValue.
Например:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s22 | cashbook | modified_by | FormulaValue | ATTRIBUTE | =DomainUserName() | |||
s22 | cashbook | modified_on | FormulaValue | ATTRIBUTE | =NOW() | |||
s22 | cashbook | modified_by | DoNotChange | ATTRIBUTE | ||||
s22 | cashbook | modified_on | DoNotChange | ATTRIBUTE |
В отличие от типа Formula, значения рассчитываются в момент изменения любой ячейки строки пользователем.
Вы можете использовать встроенные формулы Excel и специальные встроенные формулы: =DomainUserName() и =UserName().
Использование формул DDE
Вы можете использовать надстройку для создания панелей с формулами DDE.
Например, ниже представлена конфигурация SQLite для получения данных акций из платформы Thinkorswim с использованием SQL-запроса и таблицы xls.objects:
ID | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | TABLE_CODE | INSERT_OBJECT | UPDATE_OBJECT | DELETE_OBJECT |
---|---|---|---|---|---|---|---|
DDE WatchList | CODE | <SQL code> | WatchList | WatchList | WatchList |
Поле TABLE_CODE содержит следующий SQL-запрос:
SELECT Symbol, '=TOS|LAST!' + Symbol AS Last, '=TOS|NET_CHANGE!' + Symbol AS NetChange, '=TOS|PERCENT_CHANGE!' + Symbol AS Change, '=TOS|HIGH!' + Symbol AS High, '=TOS|LOW!' + Symbol AS Low, '=SUBSTITUTE(TOS|VOLUME!' + Symbol + '," ","")+0' AS Volume FROM WatchList
Помните, что вы можете сохранять данные в SQLite даже в бесплатной версии SaveToDB.