Итог с последней строкой таблицы

47 views
Skip to first unread message

Ольга Заболотская

unread,
May 20, 2021, 2:50:33 AM5/20/21
to XLSX Workbench
Добрый день! Подскажите, пожалуйста, есть ли возможность настроить Excel-формуляр без макроса следующим образом: если итоговая строка таблицы переносится на новую страницу, то она должна переносится вместе с последней строкой таблицы. спасибо!

Igor

unread,
May 21, 2021, 5:35:14 AM5/21/21
to XLSX Workbench
Ольга, добрый день.
В XLSX-файле бывают переносы строк Автоматические и Ручные (принудительные).

1) Автоматические переносы не хранятся в файле, они рассчитываются и расставляются приложением MS Excel в момент открытия, руководствуясь его внутренними алгоритмами, основываясь на установках принтера у конкретного пользователя, на высоте строк (а если задан автоматический подбор высоты строк по содержимому, то высота строки тоже заранее не известна) и ещё каких-то параметрах. Повлиять на такие переносы нет возможности. Можно их только убрать/перенести (посредством VBA/OLE) уже после открытия файла в MS Excel.
По этому, если у Вас строки табличной части имеют разную высоту, то невозможно заранее спрогнозировать на какой именно строке Эксель решит вставить автоматический разрыв и здесь без макросов не обойтись.

2) Ручные переносы строк хранятся в файле , а значит, их можно вставлять без участия приложения MS Excel (т.е. без макроса). Эта возможность реализована в компоненте  «Папка», пункте «Вставить разрыв страницы (в начале)». Вы можете воспользоваться этой опцией, в том случае, если все позиции табличной части будут иметь одинаковую высоту (это важно). Тогда можно заранее рассчитать сколько позиций табличной части войдет на одну страницу (например, 10). 
Идея в том, что если заранее расставить ручные переносы строк везде, где это необходимо, то в автоматических переносах строк не возникнет необходимости.
 
Схема действий такая:  
- Контекст будет содержать таблицу №1, соответствующую страницам; а в каждой строке этой таблицы будет вложенная таблица №2, соответствующая позициям, размещающимся на этой странице (т.е. 10 позиций). Кроме того, в контексте будет ещё одна структура, соответствующая последней позиции (№3)

- В программе печати нужно делить весь выводимый массив позиций на порции по 10 штук и для каждой порции создавать новую запись в  таблице №1 контекста  (страницы), и помещать их в таблицу №2. 
  • страница 1 (строка таблицы №1)
    • позиция 1   (строка таблицы №2)
    • позиция 2   (строка таблицы №2)
    • позиция 3   (строка таблицы №2)
    • ...
    • позиция 10  (строка таблицы №2)
  • страница 2  (строка таблицы №1)
    • позиция 1   (строка таблицы №2)
    • позиция 2   (строка таблицы №2)
    • позиция 3   (строка таблицы №2)
    • ...
    • позиция 10  (строка таблицы №2)
  • страница ...
  • страница (последняя)
Если последняя позиция, которую требуется вывести, вдруг окажется 10-й по счету (на последней странице), значит, её нужно убрать из таблицы №2 контекста и переложить в структуру №3 (в остальных случаях эта структура будет пустая.

- В формуляре нужно создать два Цикла (один вложен в другой) и связать их с таблицами №1 и №2.
Цикл №2 нужно заключить в Папку и включить в ней опцию «Вставить разрыв страницы (в начале)». В результате, перед каждыми 10-ю позициями будет вставляться Ручной перенос страницы. 
Кроме того, нужно создать Паттерн с итоговой строкой в двух вариантах: Первый вариант - с присоединенной последней позицией из структуры (№3) и заключенный в папку с включенной опцией «Вставить разрыв страницы (в начале)». Второй вариант - просто итоговая строка без последней позиции и без папки. Вывод первого или второго варианта задаем условием наличия значения в структуре (№3) через пункт Пункт «Появление при выводе». 

С уважением, 
Игорь Бородин

четверг, 20 мая 2021 г. в 09:50:33 UTC+3, Ольга Заболотская:
Reply all
Reply to author
Forward
0 new messages