首页 > 其他分享 >ALV合并单元格

ALV合并单元格

时间:2024-04-10 18:11:53浏览次数:21  
标签:gs merge 单元格 合并 alv 9000 ALV TYPE col

1、文章说明

 在开发一些报表时,需要显示双层的标题,或者合并单元格的数据,归根结底就是要实现类似EXCEL合并单元格的需求。如图所示

网上的资料,很多根据国外某大神的方法实现:https://tricktresor.de/blog/zellen-verbinden/

本文章在测试该方法时,发现了一些问题,并根据个人实现习惯,加以优化和修改:

优化问题:

1、优化源代码只能对第1列进行垂直合并。

2、解决源代码垂直合并中,将导致下一列字段内容被清空。

本文章通过不画CONTAINER的OOALV方式实现ALV报表,虽然解决了一些BUG,但实现方法仍有很大的优化空间,读者可动手持续优化。

2、实现过程

首先创建9000屏幕

程序中根据超类,创建新的类

定义ALV对象

在ALV中预留要显示标题的空行

并去掉fieldcat自动带出来的列名

调用ALV显示方法后,开始合并单元格

垂直合并,outputlen表示向下合并几行(包含本行)

水平合并,outputlen表示向右合并到第几列

设置对应单元格的名称

3、源代码参考

"--------------------@斌将军--------------------
REPORT ybintest018.
*----------------------------------------------------------------------*
*表声明
*----------------------------------------------------------------------*
TABLES:sscrfields."

*----------------------------------------------------------------------*
*类型池声明
*----------------------------------------------------------------------*
TYPE-POOLS:slis.

INCLUDE <cl_alv_control>.
*----------------------------------------------------------------------*
* 类型定义
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_alv,
        xm    TYPE char20,
        hsl01 TYPE acdoca-hsl,
        hsl02 TYPE acdoca-hsl,
        hsl03 TYPE acdoca-hsl,
        hsl04 TYPE acdoca-hsl,
        hsl05 TYPE acdoca-hsl,
        hsl06 TYPE acdoca-hsl,
        hsl07 TYPE acdoca-hsl,
        hsl08 TYPE acdoca-hsl,
        hsl09 TYPE acdoca-hsl,
        hsl10 TYPE acdoca-hsl,
        hsl11 TYPE acdoca-hsl,
        hsl12 TYPE acdoca-hsl,
        hz    TYPE char20,
      END OF ty_alv.

*----------------------------------------------------------------------*
* 声明内表和工作区
*----------------------------------------------------------------------*
DATA:gt_alv TYPE TABLE OF ty_alv,
     gs_alv TYPE ty_alv.

FIELD-SYMBOLS:<fs_gs_alv> TYPE ty_alv.

*----------------------------------------------------------------------*
*       ALV层级关系定义
*----------------------------------------------------------------------*

CLASS zcl_gui_alv_grid DEFINITION DEFERRED.

*创建ALV屏幕
DATA:g_grid_9000      TYPE REF TO zcl_gui_alv_grid, "ALV容器的实例
     g_container_9000 TYPE REF TO cl_gui_docking_container, "ALV容器 不用画屏幕容器
     gs_variant_9000  TYPE disvariant,
     gs_style         TYPE lvc_s_styl,
     gt_fieldcat_9000 TYPE lvc_t_fcat,
     gs_fieldcat      TYPE lvc_s_fcat,
     gs_layout_9000   TYPE lvc_s_layo.  "ALV 控制: 布局结构

DATA:r_ucomm   LIKE sy-ucomm,
     ok_code   TYPE sy-ucomm,
     save_code TYPE sy-ucomm.

*&---------------------------------------------------------------------*
* CLASS DEFINITION 定义类/Definition class
*&---------------------------------------------------------------------*
CLASS zcl_gui_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.

  PUBLIC SECTION.
    "水平合并
    METHODS z_set_merge_horiz
      IMPORTING
        row           TYPE i
      CHANGING
        tab_col_merge TYPE lvc_t_co01.

    "垂直合并
    METHODS z_set_merge_vert
      IMPORTING
        row           TYPE i
      CHANGING
        tab_col_merge TYPE lvc_t_co01.

    "标题文本
    METHODS z_set_title_value
      IMPORTING
        row   TYPE i
        col   TYPE i
        value TYPE lvc_value.

    "清空单元格样式
    METHODS z_init_cell_styles.

    "单元格样式
    METHODS z_set_cell_style
      IMPORTING
        row    TYPE i OPTIONAL
        col    TYPE i OPTIONAL
        style  TYPE lvc_style
        style2 TYPE lvc_style OPTIONAL.

    "冻结行列
    METHODS z_set_fixed_col_row
      IMPORTING
        row TYPE i
        col TYPE i.

    "显示
    METHODS z_display.
ENDCLASS.                    "ZCL_GUI_ALV_GRID DEFINITION

*&---------------------------------------------------------------------*
* CLASS IMPLEMENTATION 实现类/Implementation class
*&---------------------------------------------------------------------*
CLASS zcl_gui_alv_grid IMPLEMENTATION.

  "水平合并
  METHOD z_set_merge_horiz.

* ROW - Zeile deren Spalten zusammengef�hrt werden sollen
* tab_col_merge - Spalten, die zusammengef�hrt werden sollen
    FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
    DATA outputlen TYPE i.

    SORT tab_col_merge.
* Die Spalten, die zusammengef�hrt werden sollen
    LOOP AT tab_col_merge ASSIGNING <fs_cols>.
* ein paar Pr�fungen
      IF <fs_cols>-col_id    LE 0.                CONTINUE. ENDIF.
      IF <fs_cols>-outputlen LE <fs_cols>-col_id. CONTINUE. ENDIF.
      outputlen = <fs_cols>-outputlen - <fs_cols>-col_id.
      LOOP AT mt_data ASSIGNING <fs_data>
      WHERE row_pos = row  AND
      ( col_pos BETWEEN <fs_cols>-col_id AND
      <fs_cols>-outputlen ).
* Setze wie weit soll gemerged werden Von Spalte in L�nge
* und zwar wird bei der 1 Spalte angefangen
        IF <fs_data>-col_pos = <fs_cols>-col_id.
          <fs_data>-mergehoriz = outputlen.
* bei allen anderen, die zusammangeh�ren
* muss der Wert raus, da er aus der 1. Spalte kommt
* und das mergekennzeichen muss auch weg !
        ELSE.
          CLEAR <fs_data>-mergehoriz.
          CLEAR <fs_data>-value.
        ENDIF.
      ENDLOOP.

    ENDLOOP.

  ENDMETHOD.

  "垂直合并
  METHOD z_set_merge_vert.

* ROW - Zeile deren Spalten zusammengef�hrt werden sollen
* tab_col_merge - Spalten, die zusammengef�hrt werden sollen
    FIELD-SYMBOLS <fs_cols> TYPE lvc_s_co01.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
    DATA:outputlen  TYPE i,
         lv_row_end TYPE i.

    SORT tab_col_merge.
* Die Spalten, die zusammengef�hrt werden sollen
    LOOP AT tab_col_merge ASSIGNING <fs_cols>.
* ein paar Pr�fungen
      IF <fs_cols>-col_id    LE 0.                CONTINUE. ENDIF.
*      IF <fs_cols>-outputlen LE <fs_cols>-col_id. CONTINUE. ENDIF.
*      outputlen = <fs_cols>-outputlen - <fs_cols>-col_id.
      outputlen = <fs_cols>-outputlen - 1.
      lv_row_end = row + outputlen.
      LOOP AT mt_data ASSIGNING <fs_data>
      WHERE ( row_pos BETWEEN row AND lv_row_end )
        AND col_pos = <fs_cols>-col_id.
*      ( col_pos BETWEEN <fs_cols>-col_id AND
*      <fs_cols>-outputlen ).


* Setze wie weit soll gemerged werden Von Spalte in L�nge
* und zwar wird bei der 1 Spalte angefangen
*        IF <fs_data>-col_pos = <fs_cols>-col_id.
        IF <fs_data>-row_pos = row.
          <fs_data>-mergevert = outputlen.
* bei allen anderen, die zusammangeh�ren
* muss der Wert raus, da er aus der 1. Spalte kommt
* und das mergekennzeichen muss auch weg !
        ELSE.
          CLEAR <fs_data>-mergevert.
          CLEAR <fs_data>-value.
        ENDIF.
      ENDLOOP.

    ENDLOOP.

  ENDMETHOD.

  "标题文本
  METHOD z_set_title_value.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.

    LOOP AT mt_data ASSIGNING <fs_data>
    WHERE row_pos = row  AND col_pos = col.
      <fs_data>-value = value.
    ENDLOOP.
  ENDMETHOD.                    "z_set_title_value

  "清空单元格样式
  METHOD z_init_cell_styles.
    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
* Nur Spalte setze komplette Spalte
    LOOP AT mt_data ASSIGNING <fs_data>.
      <fs_data>-style = 0.
    ENDLOOP.
  ENDMETHOD.

  "单元格样式
  METHOD z_set_cell_style.

    FIELD-SYMBOLS <fs_data> TYPE lvc_s_data.
    IF row IS INITIAL.
      IF col IS INITIAL.
* Beides leer -> nichts zu tun.
        EXIT.
      ELSE.
* Nur Spalte setze komplette Spalte
        LOOP AT mt_data ASSIGNING <fs_data>
        WHERE col_pos = col.
          <fs_data>-style  = <fs_data>-style + style.
          <fs_data>-style2 = <fs_data>-style2 + style2.
        ENDLOOP.
      ENDIF.
    ELSE.
      IF col IS INITIAL.
* Nur Zeile eingegeben -> komplette Zeile setzen
        LOOP AT mt_data ASSIGNING <fs_data>
        WHERE row_pos = row.
          <fs_data>-style  = <fs_data>-style + style.
          <fs_data>-style2 = <fs_data>-style2 + style2.
        ENDLOOP.
      ELSE.
        READ TABLE mt_data ASSIGNING <fs_data>
        WITH KEY row_pos = row
        col_pos = col.
        IF sy-subrc EQ 0.
          <fs_data>-style  = <fs_data>-style + style.
          <fs_data>-style2 = <fs_data>-style2 + style2.
        ELSE.
          EXIT.
        ENDIF.
      ENDIF.
    ENDIF.

  ENDMETHOD.

  "冻结行列
  METHOD z_set_fixed_col_row.

    me->set_fixed_cols( col ).
    me->set_fixed_rows( row ).
  ENDMETHOD.

  "显示
  METHOD z_display.

    DATA lv_stable TYPE lvc_s_stbl.
    DATA lv_soft   TYPE c.

**** Prepare refresh
*  lv_stable-row = 'X'.
*  lv_stable-col = 'X'.
*  lv_soft       = 'X'.
*
**** Refresh table because Z_SET_CELL_STYLE adds style-values
**** Refresh initializes mt_data
*  CALL METHOD refresh_table_display
*    EXPORTING
*      is_stable      = lv_stable
*      i_soft_refresh = lv_soft
*    EXCEPTIONS
*      OTHERS         = 1.

* Jetzt noch  �bertragen der ge�nderten Daten
    CALL METHOD me->set_data_table
      CHANGING
        data_table = mt_data[].

    CALL METHOD set_auto_redraw
      EXPORTING
        enable = 1.

  ENDMETHOD.

ENDCLASS.                    "ZCL_GUI_ALV_GRID IMPLEMENTATION
*&---------------------------------------------------------------------*
*&  START-OF-SELECTION:程序运行所处理的代码
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  "获取取数
  PERFORM frm_get_data.

  CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text 获取数据
*----------------------------------------------------------------------*
FORM frm_get_data.

  APPEND INITIAL LINE TO gt_alv.
  APPEND INITIAL LINE TO gt_alv.

  "第3行
  CLEAR gs_alv.
  gs_alv-xm = '成本'.
  gs_alv-hsl01 = '10'.
  gs_alv-hsl02 = '20'.
  gs_alv-hsl03 = '30'.
  gs_alv-hsl04 = '40'.
  gs_alv-hsl05 = '50'.
  gs_alv-hsl06 = '60'.
  gs_alv-hsl07 = '70'.
  gs_alv-hsl08 = '80'.
  gs_alv-hsl09 = '90'.
  gs_alv-hsl10 = '100'.
  gs_alv-hsl11 = '110'.
  gs_alv-hsl12 = '120'.
  gs_alv-hz = '780'.
  APPEND gs_alv TO gt_alv.

  "第4行
  CLEAR gs_alv.
  gs_alv-xm = '利润'.
  gs_alv-hsl01 = '110'.
  gs_alv-hsl02 = '120'.
  gs_alv-hsl03 = '130'.
  gs_alv-hsl04 = '140'.
  gs_alv-hsl05 = '150'.
  gs_alv-hsl06 = '160'.
  gs_alv-hsl07 = '170'.
  gs_alv-hsl08 = '180'.
  gs_alv-hsl09 = '190'.
  gs_alv-hsl10 = '1100'.
  gs_alv-hsl11 = '1110'.
  gs_alv-hsl12 = '1120'.
  gs_alv-hz = '4680'.
  APPEND gs_alv TO gt_alv.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_LAYOUT_9000
*&---------------------------------------------------------------------*
FORM frm_alv_layout_9000.
  CLEAR gs_layout_9000.
  gs_layout_9000-sel_mode   = 'A'.     "选择行模式
  gs_layout_9000-cwidth_opt = 'A'.     "优化列宽设置
  gs_layout_9000-zebra      = 'X'.     "设置斑马线
  gs_layout_9000-no_toolbar = 'X'.
  gs_layout_9000-no_headers = 'X'."不显示列名
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_FIELDCAT_9000
*&---------------------------------------------------------------------*
FORM frm_alv_fieldcat_9000.
  DATA:lv_times     TYPE i,
       lv_count     TYPE i,
       lv_fieldname TYPE lvc_fname,
       lv_coltext   TYPE lvc_txtcol.

  REFRESH:gt_fieldcat_9000.
  DEFINE  init_fill_fcat.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname  = &1.
    gs_fieldcat-coltext    = &2.
    gs_fieldcat-scrtext_l  = &2.
    gs_fieldcat-scrtext_m  = &2.
    gs_fieldcat-scrtext_s  = &2.
    gs_fieldcat-reptext    = &2.
    gs_fieldcat-col_pos  = &3.
*    gs_fieldcat-do_sum  = &3.
*    gs_fieldcat-hotspot = &4.
    gs_fieldcat-icon   = &4.
    gs_fieldcat-hotspot = &5.
        gs_fieldcat-no_zero = &6.
    gs_fieldcat-edit = &7.
    gs_fieldcat-datatype  = &8.
    gs_fieldcat-inttype  = &9.
    APPEND gs_fieldcat TO gt_fieldcat_9000.
  END-OF-DEFINITION.

  init_fill_fcat 'XM' '项目'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL01' 'HSL01'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL02' 'HSL02'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL03' 'HSL03'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL04' 'HSL04'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL05' 'HSL05'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL06' 'HSL06'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL07' 'HSL07'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL08' 'HSL08'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL09' 'HSL09'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL10' 'HSL10'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL11' 'HSL11'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HSL12' 'HSL12'  '' '' '' '' '' '' ''.
  init_fill_fcat 'HZ' '汇总'  '' '' '' '' '' '' ''.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_CONTAINER_9000
*&      创建容器
*&---------------------------------------------------------------------*
FORM frm_create_container_9000.

  CREATE OBJECT g_container_9000
    EXPORTING
      repid                       = sy-repid
      dynnr                       = '9000'
*     side                        = cl_gui_docking_container=>dock_at_right      ”ALV贴屏幕右边,从屏幕右边开始算宽度
      side                        = cl_gui_docking_container=>dock_at_top       "ALV贴屏幕左边,从左边算屏幕宽度,
      extension                   = 1000                                          "屏幕宽度
*     ratio                       = 95  "屏幕比例 小于5大于95会报cntl_error异常
      style                       = cl_gui_control=>ws_child                     "可选参数,设置ALV是否可用手动拖动大小
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.

  IF sy-subrc <> 0.
    MESSAGE s001(00) WITH '屏幕初始化失败'.
    LEAVE LIST-PROCESSING.
  ENDIF.

*  创建容器实例
  CREATE OBJECT g_grid_9000
    EXPORTING
      i_parent          = g_container_9000
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init   = 2
      error_cntl_link   = 3
      error_dp_create   = 4
      OTHERS            = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_DISPLAY_9000
*&---------------------------------------------------------------------*
FORM frm_alv_display_9000.

  CALL METHOD g_grid_9000->set_table_for_first_display
    EXPORTING
      is_variant                    = gs_variant_9000
*     i_save                        = 'A'
      is_layout                     = gs_layout_9000
*     it_toolbar_excluding          = gt_exclude_9000
    CHANGING
      it_fieldcatalog               = gt_fieldcat_9000  "
      it_outtab                     = gt_alv      "输出数据的内表
*     it_sort                       = gt_sort
*     it_filter                     = gt_filt
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  "合并单元格
  "垂直合并
  PERFORM frm_merge_vert.
  "水平合并
  PERFORM frm_merge_horiz.
  "设置标题
  PERFORM frm_title_value.
  "设置样式
  PERFORM frm_cell_style.
  "合并单元格后显示
  g_grid_9000->z_display( ).

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_MERGE_VERT  垂直合并
*&---------------------------------------------------------------------*
FORM frm_merge_vert.
  DATA:lt_col_merge TYPE lvc_t_co01,
       ls_col_merge TYPE lvc_s_co01.


  "纵向合并
  REFRESH:lt_col_merge.
  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 1.
  ls_col_merge-outputlen = 2."向下合并多少行(含本行)
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 14.
  ls_col_merge-outputlen = 2."向下合并多少行(含本行)
  APPEND ls_col_merge TO lt_col_merge.

  "第1行的纵向合并单元格
  CALL METHOD g_grid_9000->z_set_merge_vert "纵向合并
    EXPORTING
      row           = 1
    CHANGING
      tab_col_merge = lt_col_merge.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_MERGE_HORIZ 水平合并
*&---------------------------------------------------------------------*
FORM frm_merge_horiz.
  DATA:lt_col_merge TYPE lvc_t_co01,
       ls_col_merge TYPE lvc_s_co01.

  "水平合并
  REFRESH:lt_col_merge.
  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 2.
  ls_col_merge-outputlen = 4."水平合并到第几列
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 5.
  ls_col_merge-outputlen = 7.
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 8.
  ls_col_merge-outputlen = 10.
  APPEND ls_col_merge TO lt_col_merge.

  CLEAR:ls_col_merge.
  ls_col_merge-col_id    = 11.
  ls_col_merge-outputlen = 13.
  APPEND ls_col_merge TO lt_col_merge.

  "第1行的水平合并单元格
  CALL METHOD g_grid_9000->z_set_merge_horiz "水平合并
    EXPORTING
      row           = 1
    CHANGING
      tab_col_merge = lt_col_merge.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CELL_STYLE 设置样式
*&---------------------------------------------------------------------*
FORM frm_cell_style.
  "设置值效果:加粗 居中 主键颜色
  gs_style-style = alv_style_font_bold
  + alv_style_align_center_center
  + alv_style_color_heading.

  "第1行 第1列
  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 1
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 2
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 5
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 8
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 11
      style = gs_style-style.

  CALL METHOD g_grid_9000->z_set_cell_style
    EXPORTING
      row   = 1
      col   = 14
      style = gs_style-style.

  "冻结行和列
  g_grid_9000->z_set_fixed_col_row(
  EXPORTING col = 1
    row = 2 ).
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_TITLE_VALUE 设置标题
*&---------------------------------------------------------------------*
FORM frm_title_value.
  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 1
      value = '项目'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 2
      value = '1季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 5
      value = '2季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 8
      value = '3季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 11
      value = '4季度'.

  CALL METHOD g_grid_9000->z_set_title_value
    EXPORTING
      row   = 1
      col   = 14
      value = '汇总'.

  DATA:lv_fname TYPE lvc_value,
       lv_index TYPE sy-index.
  DO 12 TIMES.
    lv_fname = sy-index && '月'.
    lv_index = sy-index + 1.
    CALL METHOD g_grid_9000->z_set_title_value
      EXPORTING
        row   = 2
        col   = lv_index
        value = lv_fname.
  ENDDO.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH_ALV_9000
*&---------------------------------------------------------------------*
FORM frm_refresh_alv.
  DATA: lt_celltab TYPE lvc_t_styl,
        ls_celltab TYPE lvc_s_styl,
        ls_stable  TYPE lvc_s_stbl.

  ls_stable-row = 'X'.  "固定行
  ls_stable-col = 'X'.  "固定列

  CHECK g_grid_9000 IS NOT INITIAL.

  CALL METHOD g_grid_9000->refresh_table_display
    EXPORTING
      is_stable = ls_stable
*     I_SOFT_REFRESH = 'X'
    EXCEPTIONS
      finished  = 1
      OTHERS    = 2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CALL METHOD cl_gui_cfw=>flush.
ENDFORM.
*&---------------------------------------------------------------------*
*&  屏幕流
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.

  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDMODULE.

*&---------------------------------------------------------------------*
*&  屏幕流
*&---------------------------------------------------------------------*
MODULE display_alv_9000 OUTPUT.
  IF g_container_9000 IS INITIAL.
    PERFORM frm_create_container_9000.
    PERFORM frm_alv_fieldcat_9000.
    PERFORM frm_alv_layout_9000.
    PERFORM frm_alv_display_9000.
  ELSE.
    PERFORM frm_refresh_alv.
  ENDIF.
ENDMODULE.

*&---------------------------------------------------------------------*
*&  屏幕流
*&---------------------------------------------------------------------*
MODULE user_command_9000 INPUT.

  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN '&BACK'."设置功能键返回按钮单击事件
      LEAVE TO SCREEN 0.
    WHEN '&EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.
"--------------------@斌将军--------------------

 

4、结语

以上就是关于ALV合并单元格的介绍,希望对您有所帮助。

在总结过程中,也参考学习了以下文章:

http://t.csdnimg.cn/zAWea

定期更文,欢迎关注

 

 

  TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back     此页面的语言为英语   翻译为中文(简体)          

标签:gs,merge,单元格,合并,alv,9000,ALV,TYPE,col
From: https://www.cnblogs.com/BinGeneral/p/18126518

相关文章

  • MySQL-6.表的高级查询(多表查询、子查询、表复制、合并查询、表外连接)
    6.1 多表查询基于两个或以上表的查询,默认从表1取出一行,与表2的每一行组合,返回的记录数为表1×表2,默认返回的结果为笛卡尔集,需写出正确的WHERE条件进行筛选。多表查询的条件不能少于表的个数-1,否则会出现笛卡尔集。指定显示某个表的列:表.列#显示雇员名,雇员工资及所在......
  • function ALV 获取OO ALV event ID
    SAPABAPALV(LVC)的一个自定义事件(F4帮助事件,回车ENTER按钮事件)的一个实例https://blog.csdn.net/zhongguomao/article/details/51775112 1.定义和注册事件接受器类*----------------------------------------------------------------------**CLASSLCL_EVENT_RECE......
  • OO ALV 强制触发 data_change事件
    参考博客https://community.sap.com/t5/application-development-blog-posts/trigger-alv-data-change-event-manual/ba-p/13003658https://blog.csdn.net/qq_40977705/article/details/104599677https://blog.csdn.net/qq_40977705/article/details/108880331data_change写l......
  • 【数据结构 | 并查集】维护元素分组信息,支持高效合并集合、查询元素所在集合
    文章目录并查集概述引入并查集的实现存储方式Union-Find抽象基类两种实现思路基本实现基于QuickFind思路基于QuickUnion思路优化基于size的优化基于rank的优化find优化路径压缩路径分裂路径减半总结并查集概述并查集(DisjointSetUnion,简称并查集),也叫......
  • spring-LocalVariableTableParameterNameDiscoverer
    记录一下后期整理注:此工具类是解析class文件从class文件获取,而不是通过元空间的class对象的method获取 /***在jdk8以前java源码编译后通过反射是无法获得形参名的,在Java8及之后,编译的时候可以通过-parameters为反射生成元信息,可以获取到方法的参数名,但这......
  • cmd通过copy命令合并文件
    在Windows的命令提示符(CMD)中,copy命令可以用来合并文件内容。以下是如何使用copy命令合并文件内容的基本步骤:打开命令提示符(CMD)。使用cd命令导航到包含你要合并的文件的目录。使用以下命令合并文件:copy/b文件1+文件2目标文件这里,/b选项告诉copy命令以二进制模......
  • PostgreSQL 将分组后的字段合并成一个 JSON 对象
    在PostgreSQL数据库中,有时需要将分组后的字段合并成一个JSON对象,并将其保存到一个新的字段中。本文将介绍如何使用PostgreSQL中的json_agg函数来实现这一目标。假设我们有一个销售订单表格,其中包含订单编号、产品名称和销售数量等字段。现在我们需要按照订单编号分组,并将......
  • 断点续传-视频文件的分块和合并
    目录一,前言二,断点续传三,断点续传流程:四,java代码测试分块和合并视频文件分块: 视频文件合并:五,应用(简单了解)一,前言通常视频文件都比较大,项目中需要满足大文件的上传要求,http协议本身对上传文件大小没有限制,但是客户的网络质量,电脑硬件环境等参差不齐,如果一个大的......
  • 合并两个有序链表 - LeetCode 热题 27
    大家好!我是曾续缘......
  • OO ALV滚动条问题
    问题界面 调整效果  注意需要开垂直水平滚动 垂直行不宜过大,可以自己试 我这边是垂直参数20-24行即可  ......