Преобразование формул

Преобразование формул

Разработчики могут возвращать формулы Microsoft Excel из представлений, хранимых процедур или SQL запросов.

Например:

SELECT
    id
    , name
    , qty
    , price
    , '=@qty*@price' AS amount
...

Продукты SaveToDB преобразуют такие формулы в расчетные формулы, специфичные для каждой платформы (Excel, DataTable или JavaScript).

Надстройка SaveToDB поддерживает практически все формулы Microsoft Excel. DBEdit, DBGate и ODataDB поддерживают подмножество формул.

Продукты SaveToDB определяют такие формулы по ячейке первой строки, анализируют формулы в колонке, и применяют формулу либо для колонки, либо для каждой ячейки.

ConverFormulas и DoNotConverFormulas

Разработчики могут включить или отключить преобразование формул, используя типы ConvertFormulas и DoNotConverFormulas в таблице xls.handlers.

Например:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODE
 s02usp_cashbook5balanceConvertFormulasATTRIBUTE
 xlshandlersHANDLER_CODEDoNotConvertFormulasATTRIBUTE

Используйте ConvertFormulas для преобразования формул, даже если первая ячейка не содержит формул, как например, начальное сальдо в примере выше.

Используйте DoNotConvertFormulas для отмены преобразования формул, даже если первая ячейка содержит формулу, что, например, возможно в поле HANDLER_CODE.

Formula и FormulaValue

Разработчики могут задать формулы для расчета значений колонки, используя тип Formula и формулы в поле HANDLER_CODE.

Например:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODE
 s04usp_order_formamountFormulaATTRIBUTE=@qty*@price
 s22cashbookamountDoNotChangeATTRIBUTE

Этот случай аналогичен представленному во введении.

Однако, запрос при этом возвращает актуальные данные, а не формулы, и сами формулы вставляются после загрузки. Т.е. метод применим и для таблиц.

Также, сохраняются все строки, значения формул которых изменились.

Это очень мощная возможность для пересчета всех значений колонки.

Пример конфигурации также содержит обработчик DoNotChange. Используйте его для предотвращения ручных изменений.

Вторая возможность - это тип FormulaValue.

Например:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODE
 s22cashbookmodified_byFormulaValueATTRIBUTE=DomainUserName()
 s22cashbookmodified_onFormulaValueATTRIBUTE=NOW()
 s22cashbookmodified_byDoNotChangeATTRIBUTE
 s22cashbookmodified_onDoNotChangeATTRIBUTE

В отличие от типа Formula, значения рассчитываются в момент изменения пользователем любой ячейки строки.

Вы можете использовать встроенные формулы Excel и специальные встроенные формулы: =DomainUserName() и =UserName().

Использование формул DDE

Вы можете использовать надстройку для создания панелей с формулами DDE.

Например, ниже представлена конфигурация SQLite для получения данных акций из платформы Thinkorswim, с использованием SQL запроса и таблицы xls.objects:

IDTABLE_SCHEMATABLE_NAMETABLE_TYPETABLE_CODEINSERT_OBJECTUPDATE_OBJECTDELETE_OBJECT
 DDE WatchListCODE<SQL code>WatchListWatchListWatchList

где поле 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.