protected void processSheet(final ExecutionContext ectx, final Sheet sheet) throws Exception {
   ectx.sheet = sheet;
   for (final ReportEventListener listener : ectx.listeners) {
     listener.beforeSheet(ectx);
   }
   if (ectx.sheet.isRendered()) {
     ectx.wsheet = ectx.wb.createSheet((String) sheet.getTitle().getValue(ectx.elctx));
     // ctx.wsheet.setRowSumsBelow(false);
     ectx.wsheet.setAlternativeExpression(
         false); // setAlternativeExpression делает то что должен делать метод setRowSumBelow() ...
     final int sheetIdx = ectx.wb.getSheetIndex(ectx.wsheet);
     ectx.wb.setSheetHidden(sheetIdx, sheet.isHidden());
     ectx.wsheet.setZoom(sheet.getZoom(), 100);
     if (sheet.isProtected() && ectx.report.getPassword() != null && ectx.wb.isWriteProtected()) {
       ectx.wsheet.protectSheet((String) ectx.report.getPassword().getValue(ectx.elctx));
     }
     for (final Section section : sheet.getSections()) {
       processSection(ectx, section);
     }
     final int[] widths = sheet.getColumnWidths();
     for (int i = 0; i < widths.length; i++) {
       ectx.wsheet.setColumnWidth((short) i, widths[i]);
     }
     final boolean[] hidden = sheet.getColumnHidden();
     for (int i = 0; i < hidden.length; i++) {
       ectx.wsheet.setColumnHidden(i, hidden[i]);
     }
     for (Iterator<TreeNode<ColumnGroup>> i = sheet.getColumnGroups().traverseChildNodes();
         i.hasNext(); ) {
       final ColumnGroup group = i.next().getData();
       ectx.wsheet.groupColumn(group.getFirstColumn(), (short) group.getLastColumn());
     }
     ectx.wsheet.getHeader().setLeft(sheet.getHeader().getLeft());
     ectx.wsheet.getHeader().setCenter(sheet.getHeader().getCenter());
     ectx.wsheet.getHeader().setRight(sheet.getHeader().getRight());
     ectx.wsheet.getFooter().setLeft(sheet.getFooter().getLeft());
     ectx.wsheet.getFooter().setCenter(sheet.getFooter().getCenter());
     ectx.wsheet.getFooter().setRight(sheet.getFooter().getRight());
     processPrintSetup(ectx.wsheet, sheet.getPrintSetup());
   }
   for (final ReportEventListener listener : ectx.listeners) {
     listener.afterSheet(ectx);
   }
   ectx.sheet = null;
   ectx.wsheet = null;
 }