xtt->MERGE( IV_BLOCK_NAME = ‘R’ IS_BLOCK =
{"TITLE"=>"Title", "T"=>[{"GROUP"=>"GRP A", "CAPTION"=>"<Caption 1 />", "DATE"=>"2020-10-21", "SUM1"=>5971.44, "SUM2"=>5021.46}, {"GROUP"=>"GRP C", "CAPTION"=>"<Caption 2 />", "DATE"=>"2020-10-19", "SUM1"=>2276.75, "SUM2"=>7717.2}, {"GROUP"=>"GRP B", "CAPTION"=>"<Caption 3 />", "DATE"=>"2020-10-20", "SUM1"=>3031.38, "SUM2"=>445.22}, {"GROUP"=>"GRP A", "CAPTION"=>"<Caption 4 />", "DATE"=>"2020-10-21", "SUM1"=>9476.79, "SUM2"=>3683.27}, {"GROUP"=>"GRP A", "CAPTION"=>"<Caption 5 />", "DATE"=>"2020-10-21", "SUM1"=>4604.0, "SUM2"=>5525.85}, {"GROUP"=>"GRP C", "CAPTION"=>"<Caption 6 />", "DATE"=>"2020-10-19", "SUM1"=>2159.71, "SUM2"=>2260.94}, {"GROUP"=>"GRP B", "CAPTION"=>"<Caption 7 />", "DATE"=>"2020-10-20", "SUM1"=>2490.3, "SUM2"=>6388.81}, {"GROUP"=>"GRP A", "CAPTION"=>"<Caption 8 />", "DATE"=>"2020-10-21", "SUM1"=>5476.81, "SUM2"=>406.18}, {"GROUP"=>"GRP D", "CAPTION"=>"<Caption 9 />", "DATE"=>"2020-10-18", "SUM1"=>689.66, "SUM2"=>518.6}, {"GROUP"=>"GRP C", "CAPTION"=>"<Caption 10 />", "DATE"=>"2020-10-19", "SUM1"=>5451.87, "SUM2"=>4061.85}, {"GROUP"=>"GRP D", "CAPTION"=>"<Caption 11 />", "DATE"=>"2020-10-18", "SUM1"=>4573.55, "SUM2"=>5436.0}, {"GROUP"=>"GRP C", "CAPTION"=>"<Caption 12 />", "DATE"=>"2020-10-19", "SUM1"=>1196.35, "SUM2"=>522.46}, {"GROUP"=>"GRP C", "CAPTION"=>"<Caption 13 />", "DATE"=>"2020-10-19", "SUM1"=>7686.95, "SUM2"=>2727.98}, {"GROUP"=>"GRP D", "CAPTION"=>"<Caption 14 />", "DATE"=>"2020-10-18", "SUM1"=>978.18, "SUM2"=>295.55}, {"GROUP"=>"GRP D", "CAPTION"=>"<Caption 15 />", "DATE"=>"2020-10-18", "SUM1"=>71.12, "SUM2"=>8878.56}], "DATE"=>"2020-10-21", "TIME"=>"12:12:12", "DATETIME"=>"20201021121212"}
).
xtt->MERGE( IV_BLOCK_NAME = ‘A’ IS_BLOCK =
{"INFO"=>"String 1 "}{"INFO"=>"String 2 "}{"INFO"=>"String 3 "}
).
Формулы в XTT
Прямое редактирование формул из кода запрещено, тк данный подход чреват ошибками и не очень информативен.
К тому же внутренне представление формул в Excel xlsx (абсолютные) и Excel xml (относительные) не позволяет использовать единообразный подход, если бы заполнение формул происходило со стороны ABAP.
Вместо этого, есть несколько (надеюсь простых) правил при редактировании формул в самом MS Excel.
Копирование данных
Добавление новых строк (и ячеек) происходит за счет копирования исходной строки в шаблоне. Вместе с данными ячеек, границами и прочим форматированием копируются и сами формулы.
Чтобы формулы “не поехали” при копировании можно использовать несколько способов:
Относительные ссылки в XLSX
Самым родным и надежным способом для Excel является - “плясать” от текущей ячейки где прописываем формулу, те использовать =OFFSET() (в русской локализации =СМЕЩ()) в купе с =INDIRECT() / ДВССЫЛ() для создания относительных формул.
те, чтобы получить сумму предыдущих трех ячеек (1,2,3), надо сместиться на -3 ячейки по столбцам и расширить диапазон на 3 ячейки
Смещение можно указать и напрямую в INDIRECT(“RC[-3]”,0), в таких формулах также может пригодится:
- =ROW() / СТРОКА() и
*=COLUMN() СТОЛБЕЦ()*
которые без передачи аргументов возвращают текущую строку и столбец
Знак $ для строки
Указывать смещения от текущей ячейки, не очень удобно, поэтому для упрощения было введена правило:
Если указать номер текущей строки со знаком $, он будет заменен во время выполнения
В итоговом отчете будет так
PS: Для ;direction=column (те вывода таблицы по столбцам) данное правило соответственно будет работать для формул в таком виде $E
Shared formulas
Ранее в AOK & XTT происходили “таинственные” исчезновения формул
Происходил данный баг когда относительная ссылка встречалась несколько раз подряд
В текущей версии преобразование из абсолютной ссылки в относительную и обратно, надеюсь, происходит без проблем
Именованные диапазоны ячеек
Если сослать на именованный диапазон, который будет изменен во время выполнения
- Произойдет однократное растягивание всего диапазона
- Если же название диапазона заканчивается на ‘_’ данный будет размножен и итоговый список будет заменен в самой формуле
Сумма дочерних элементов
Для суммы дочерних вовсе не обязательно использовать предыдущий способ с именованными ячейками или создавать иерархии
Если нужно просуммировать поле таблицы можно воспользоваться стандартными средствами Excel
Формулы массива
Формулы массива также поддерживаются
Word & PDF
Но что если нужно просуммировать значения поля не только в Excel, но и в Word или Pdf? В этом случае можно воспользоваться функциями агрегации ;func= SUM | AVG | COUNT | FIRST
Формулы с условным форматированием
Для формул в условных форматированиях, желательно указывать область действия в виде целых столбцов