ALV控制显示样例

 将下面的代码敲一遍,ALV基本的使用都清晰了。
 


*&---------------------------------------------------------------------*
*& REPORT  YZ_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT yz_test NO STANDARD PAGE HEADING
                   MESSAGE-ID ytest.

TYPES:BEGIN OF typ_00,
        sel           TYPE c,
        checkbox      TYPE c,
        cell_color    TYPE slis_t_specialcol_alv, "单元格颜色
        line_color(4) TYPE c,                     "行列颜色
        pernr         TYPE pa0000-pernr,
        begda         TYPE pa0000-begda,
        endda         TYPE pa0000-endda,
        massn         TYPE pa0000-massn,
        massg         TYPE pa0000-massg,
        open_folder   TYPE string,
        num           TYPE pa0008-bet01,
      END OF typ_00.

DATA lt_00 TYPE TABLE OF typ_00.
DATA ls_00 LIKE LINE OF lt_00.
TYPE-POOLS ole2 .

START-OF-SELECTION.

  SELECT * FROM pa0000 INTO CORRESPONDING FIELDS OF TABLE lt_00.
  LOOP AT lt_00 ASSIGNING FIELD-SYMBOL(<fs_008>).
    IF sy-tabix = 1.
      <fs_008>-num = 100.
    ELSE.
      <fs_008>-num = 200.
    ENDIF.
  ENDLOOP.

  DATA:i_detail TYPE TABLE OF typ_00.
  i_detail = lt_00.

  DATA: wa_fieldcat    TYPE lvc_s_fcat , " 相当于工作区
        i_fieldcat_lvc TYPE lvc_t_fcat , " 存放列名的内表
        i_layout_lvc   TYPE lvc_s_layo . " 负责整个ALV的全局属性

  DATA: v_pos TYPE i VALUE '0'.

  PERFORM  f_fields USING  'CHECKBOX' '选择框'   'X'.
  PERFORM  f_fields USING  'PERNR' '人员编号'   'X'.
  PERFORM  f_fields USING  'BEGDA' '开始日期'   'X'.
  PERFORM  f_fields USING  'ENDDA' '结束日期'   'X'.
  PERFORM  f_fields USING  'MASSN' '操作类型'   'X'.
  PERFORM  f_fields USING  'MASSG' '操作原因'   'X'.
  PERFORM  f_fields USING  'OPEN_FOLDER' '打开文件'   'X'.
  PERFORM  f_fields USING  'NUM ' '工资'   'X'.

  "按照上传的模板格式导出为本地文件
  "1.定义导出为EXCEL用到的数据变量
  DATA: v_excel        TYPE ole2_object,
        v_sheet        TYPE ole2_object,
        v_book         TYPE ole2_object,
        v_rows         TYPE ole2_object,
        v_cell         TYPE ole2_object,
        v_sheet_number TYPE i.

  "2.上传模板 SMW0
  "3.当用户触动子FORM(F_USER_COMMAND)里的导出程序时,就会触动下列代码,现将模板现在下来,进而根据模板将数据导出到EXCEL表格中
  PERFORM f_export.
FORM f_export .

  DATA: l_name     LIKE wwwdatatab,
        l_mine     LIKE w3mime OCCURS 10,
        l_title    TYPE string,
        l_filename TYPE string,
        l_path     TYPE string,
        l_fullpath TYPE string.

  l_name-relid = 'MI'.
  l_name-objid = 'ZHRR_PY005'.
  l_name-text = sy-title.

  CONCATENATE 'Z_ALV测试_' sy-uname '_' sy-datum '_' sy-uzeit INTO l_title .

*模板下载
  CALL FUNCTION 'WWWDATA_IMPORT'
    EXPORTING
      key               = l_name
    TABLES
      mime              = l_mine
    EXCEPTIONS
      wrong_object_type = 1
      import_error      = 2
      OTHERS            = 3.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = l_title
      default_extension    = 'xlsx'
      default_file_name    = l_title
      file_filter          = '(电子表格EXCEL)'
    CHANGING
      filename             = l_filename
      path                 = l_path
      fullpath             = l_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  IF sy-subrc <> 0.
    STOP.
  ENDIF.

  IF l_filename = ''.
    MESSAGE e000 WITH '已取消导出!' .
  ENDIF.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename = l_fullpath
      filetype = 'BIN'
    TABLES
      data_tab = l_mine.

*--打开excel模板
  PERFORM f_open_excel USING l_fullpath.

*--向excel写数据
  PERFORM f_write_excel_sheet.

*--设置excel可见,编辑完自动打开
*  CALL METHOD OF v_excel 'Worksheets' = v_sheet
*    EXPORTING
*    #1 = 1.
*  CALL METHOD OF v_sheet 'Activate'.
*  SET PROPERTY OF v_excel 'Visible' = 1.

* 关闭EXCEL并保存
  PERFORM f_save_excel USING l_fullpath.

ENDFORM.                    " f_export
*&---------------------------------------------------------------------*
*&      Form  f_OPEN_EXCEL
*&---------------------------------------------------------------------*
*      根据本地excel路径,打开excel应用
*----------------------------------------------------------------------*

FORM f_open_excel  USING   pa_path.

  CREATE OBJECT v_excel 'Excel.Application'.

  CALL METHOD OF v_excel 'Workbooks' = v_book.
  CALL METHOD OF v_book 'Open' = v_book
    EXPORTING
    #1 = pa_path.

  CALL METHOD OF v_book 'Sheets' = v_sheet
    EXPORTING
    #1 = 1.

ENDFORM.                    " f_OPEN_EXCEL
*&---------------------------------------------------------------------*
*&      Form  f_WRITE_EXCEL_SHEET1
*&---------------------------------------------------------------------*
*      向excel写入数据
*----------------------------------------------------------------------*
FORM f_write_excel_sheet.

  TYPES: BEGIN OF typ_name ,
           name_first(40) TYPE c,
           name_last(40)  TYPE c,
         END OF typ_name .
  DATA: i_name TYPE TABLE OF typ_name WITH HEADER LINE .
  DATA: l_name(40) TYPE c .

  SELECT adrp~name_first
         adrp~name_last
    INTO CORRESPONDING FIELDS OF TABLE i_name
    FROM adrp
            INNER JOIN usr21 ON adrp~persnumber = usr21~persnumber
   WHERE usr21~bname = sy-uname .

  LOOP AT i_name .
    CONCATENATE i_name-name_last i_name-name_first INTO l_name .
  ENDLOOP.

  DATA: l_chars(50) TYPE c,
        l_lines     TYPE i,
        l_num       TYPE i VALUE 10. "行变化,从第几行开始导入
*写入表头
  PERFORM f_write_cell USING 1 1 'Z_ALV测试'.
  CONCATENATE '制表日期:' sy-datum+0(4) '年' sy-datum+4(2)  '月'  sy-datum+6(2) '日' INTO l_chars.
  CONDENSE l_chars NO-GAPS .
  PERFORM f_write_cell USING 2 1 l_chars.

  CONCATENATE '制表人:' l_name INTO l_name .
  CONDENSE l_name NO-GAPS .
  PERFORM f_write_cell USING 2 5 l_name.

  "通过行列的方式把数据写入到Excel中
  LOOP AT lt_00 ASSIGNING FIELD-SYMBOL(<fs_write>) .
    PERFORM f_write_cell USING l_num 1 <fs_write>-pernr.
    PERFORM f_write_cell USING l_num 2 <fs_write>-begda.
    PERFORM f_write_cell USING l_num 3 <fs_write>-endda.
    PERFORM f_write_cell USING l_num 4 <fs_write>-massn.
    PERFORM f_write_cell USING l_num 5 <fs_write>-massg.
    PERFORM f_write_cell USING l_num 6 <fs_write>-num.
    l_num = l_num + 1 .
  ENDLOOP.
ENDFORM.                    " f_WRITE_EXCEL_SHEET1
*&---------------------------------------------------------------------*
*&      Form  f_WRITE_CELL
*&---------------------------------------------------------------------*
*  向excel指定cell写入数据
*----------------------------------------------------------------------*
FORM f_write_cell  USING  pa_row
                            pa_col
                            pa_val.

  CALL METHOD OF v_sheet 'Cells' = v_cell
    EXPORTING
    #1 = pa_row
    #2 = pa_col.
  SET PROPERTY OF v_cell 'Value' = pa_val.
ENDFORM.                    " f_WRITE_CELL
*&---------------------------------------------------------------------*
*&      Form  f_SAVE_EXCEL
*&---------------------------------------------------------------------*
*      保存excel文档
*----------------------------------------------------------------------*
*      -->P_L_FULLPATH  text
*----------------------------------------------------------------------*
FORM f_save_excel USING  pa_fullpath.
  SET PROPERTY OF v_excel 'DisplayAlerts' = 0.
  CALL METHOD OF v_book 'SAVEAS'
    EXPORTING
      #1 = pa_fullpath.
  CALL METHOD OF v_book 'Exit' = v_book.
  FREE OBJECT v_excel.

ENDFORM.                    " f_SAVE_EXCEL

FORM f_fields USING  iv_fieldname iv_text iv_fixcol.

  v_pos = v_pos + 1 . "初始值是零
  wa_fieldcat-col_pos       = v_pos .            " 指定列数
*  wa_fieldcat-datatype      = 'SSTR'.
  wa_fieldcat-fieldname     = iv_fieldname .     " 需要输出的内表的字段名
  wa_fieldcat-scrtext_l     = iv_text.           " 字段的描述-长字段标签
  wa_fieldcat-scrtext_m     = iv_text.           " 字段描述-中字段标签
  wa_fieldcat-scrtext_s     = iv_text.           " 字段描述-短字段标签
*  wa_fieldcat-col_opt       = 'X'  .             " layout里没有指明全局优化列宽时,指定列单列优化列宽
  IF iv_fieldname =  'NUM'.
    wa_fieldcat-do_sum        = 'X' .   " 求和
*    wa_fieldcat-edit          = 'X' .   " 修改
*  wa_fieldcat-no_sum        = 'X' .   " 取消求和
*    wa_fieldcat-datatype      = 'CURRENY'.
    wa_fieldcat-datatype      = 'CURR'."对于货币字段,这样在修改数据并保存时,才能将数据保持原样,否则输入的数据会自动将小数点提前2位;
*    wa_fieldcat-datatype      = 'QUAN' .  " 对于数量字段,也要添加一个“指定数据类型”的属性,才能保持数据的正确性
*    wa_fieldcat-inttype       = 'C' .     " 对于数量字段,也要添加一个“指定数据类型”的属性,才能保持数据的正确性
  ENDIF.
  IF iv_fieldname =  'BEGDA'.
    wa_fieldcat-rollname      = 'BEGDA' .    " 指定数据元素,就可以在ALV的显示界面将鼠标放到该字段的位置后按F1会弹出该字段的说明;
    wa_fieldcat-emphasize     = 'C711' .     " 利用设置字段和列名子的FORM(F_FIELDS)里来设置列的颜色
  ENDIF.
  IF iv_fieldname =  'PERNR' .
    wa_fieldcat-hotspot       = 'X' .     " 热点,链接用
    wa_fieldcat-key           = 'X' .     " 关键列,会变颜色
    wa_fieldcat-fix_column    = iv_fixcol .        " 是否是固定列 column列,不变颜色
  ENDIF.
  IF iv_fieldname = 'MASSN'.
    wa_fieldcat-hotspot       = 'X' .     " 热点,链接用
  ENDIF.
  IF iv_fieldname = 'MASSG'.
    wa_fieldcat-outputlen     = '10' .     " 可以明显地指明该列的输出宽度,打开自动优化列宽时失效
    wa_fieldcat-ref_field     = 'MASSG' .  "F4帮助,和HOTSPOT冲突,有热点时不显示F4帮助
    wa_fieldcat-ref_table     = 'PA0000' .
  ENDIF.
  IF iv_fieldname = 'OPEN_FOLDER'.
    wa_fieldcat-hotspot       = 'X' .     " 热点,链接用
    wa_fieldcat-outputlen     = '40' .     " 可以明显地指明该列的输出宽度,打开自动优化列宽时失效
    wa_fieldcat-tooltip       = '请选择文件  ' .     " 列抬头的工具提示
*    wa_fieldcat-icon          = 'X' .     " 图标
  ENDIF.

  IF iv_fieldname = 'CHECKBOX'.
    wa_fieldcat-checkbox    = 'X' .
    wa_fieldcat-edit        = 'X' .
    wa_fieldcat-fix_column    = iv_fixcol .        " 是否是固定列 column列,不变颜色
  ENDIF.

*  wa_fieldcat-just          = 'L' .   " 左对齐
  wa_fieldcat-just          = 'C' .   " 居中对齐
*  wa_fieldcat-just          = 'R' .   " 右对齐
  "当然,在不指明对其方式的前提下,ABAP的各种数据类型优默认的对其方式,其中字符串是默认为左对齐,而货币、数量默认为右对齐;
  APPEND wa_fieldcat TO i_fieldcat_lvc.
  CLEAR wa_fieldcat.
ENDFORM.

FORM f_top_of_page USING p_cl_dd TYPE REF TO cl_dd_document.
  DATA: m_p      TYPE i,
        m_buffer TYPE string.
  m_buffer =  '<HTML><CENTER><H1>标题</H1></CENTER></HTML>' .
  CALL METHOD p_cl_dd->html_insert
    EXPORTING
      contents = m_buffer
    CHANGING
      position = m_p.
ENDFORM.

FORM f_set_status USING p_extab TYPE slis_t_extab .

  SET PF-STATUS 'Z_ALV_STATUS' .

ENDFORM.                    " f_set_status

FORM f_user_command USING p_ucomm TYPE sy-ucomm
                          p_rs_selfield TYPE slis_selfield .
  DATA:lr_grid    TYPE REF TO cl_gui_alv_grid.
* 将界面中的选择数据更新到内表中
*=====GET_GLOBALS_FROM_SLVC_FULLSCR  START==========
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.
*=====GET_GLOBALS_FROM_SLVC_FULLSCR  END============
  CASE p_ucomm.
    WHEN '&IC1' .
      READ TABLE lt_00 ASSIGNING FIELD-SYMBOL(<fs_00>) INDEX p_rs_selfield-tabindex .
      IF sy-subrc EQ 0.
        CASE p_rs_selfield-fieldname.
          WHEN 'MASSN'.
            IF NOT <fs_00>-pernr IS INITIAL .
              PERFORM f_show_detail USING p_rs_selfield .   " 显示具体细节
            ENDIF.
          WHEN 'PERNR'.
            PERFORM f_call_tran USING p_rs_selfield .     " 调用其他事务
          WHEN 'OPEN_FOLDER'.
            PERFORM f_open_folder USING p_rs_selfield CHANGING <fs_00>.     " 打开文件
        ENDCASE.
      ENDIF.

    WHEN '&SALL'."全选
      PERFORM frm_sall_data USING 'X'.
    WHEN '&DSAL'."取消全选
      PERFORM frm_sall_data USING ''.
  ENDCASE.
  p_rs_selfield-refresh = 'X' .   " 当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新
ENDFORM.

END-OF-SELECTION.

  PERFORM f_build_layout.
  "注意: 颜色设置中有优先级顺序,他们是单元格-->行-->列,即若同时使用了上述3种更改颜色的方法,则列的颜色会被行的颜色覆盖掉,而行的颜色又会背单元格的颜色覆盖掉,最终只会显示出单元格的颜色.
  PERFORM f_cell_color.
  PERFORM f_line_color.

  "排序之后,如果同一列有相同的数据,则排好序以后,在该列会自动将相同的数据合并为一行显示,不再出现多行重复的情况
  "写在和alv同一个form
  DATA: wa_sort_lvc TYPE lvc_s_sort,
        it_sort_lvc TYPE lvc_t_sort.

  wa_sort_lvc-spos        = 1 .      " 排序顺序
  wa_sort_lvc-fieldname   = 'PERNR'.  " 排序字段
  wa_sort_lvc-up          = 'X' .        " 升序
  APPEND wa_sort_lvc TO it_sort_lvc .
  CLEAR wa_sort_lvc .

  wa_sort_lvc-spos        = 2 .      " 排序顺序
  wa_sort_lvc-fieldname   = 'MASSN'.  " 排序字段
  wa_sort_lvc-down          = 'X' .   "降序
  APPEND wa_sort_lvc TO it_sort_lvc .
  CLEAR wa_sort_lvc .

*  " 定义隐藏标准按钮的变量
*  DATA: wa_excluding TYPE slis_extab,
*        it_excluding TYPE slis_t_extab.
*  "设置要隐藏的按钮的“fcode”i_callback_pf_status_set中自定义的不会隐藏,不需要的在自定义直接删掉就好了
*  wa_excluding-fcode = '&INFO' .
*  APPEND wa_excluding TO it_excluding .

  " 小标题
  DATA: i_grid_title TYPE lvc_title .
  i_grid_title = '小标题 '.
*
**  " 回调变量
*  DATA: i_grid_settings TYPE  lvc_s_glay .
*  i_grid_settings-edt_cll_cb  = 'X' .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
*     I_INTERFACE_CHECK        = ' '
*     I_BYPASSING_BUFFER       =
*     I_BUFFER_ACTIVE          =
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'F_SET_STATUS' "自定义“工具栏”按钮
      i_callback_user_command  = 'F_USER_COMMAND '
      i_callback_top_of_page   = 'F_TOP_OF_PAGE2 ' "带图片抬头
*     i_callback_html_top_of_page = 'F_TOP_OF_PAGE ' "抬头
*     I_CALLBACK_HTML_END_OF_LIST = ' '
*     I_STRUCTURE_NAME         =
*     I_BACKGROUND_ID          = ' '
      i_grid_title             = i_grid_title"小标题
*     I_GRID_SETTINGS          = i_grid_settings
      is_layout_lvc            = i_layout_lvc
      it_fieldcat_lvc          = i_fieldcat_lvc
*      it_excluding             = it_excluding "隐藏标准按钮
*     IT_SPECIAL_GROUPS_LVC    =
      it_sort_lvc              = it_sort_lvc "排序
*     IT_FILTER_LVC            =
*     IT_HYPERLINK             =
*     IS_SEL_HIDE              =
*     I_DEFAULT                = 'X'
      i_save                   = 'A'
*     IS_VARIANT               =
*     IT_EVENTS                =
*     IT_EVENT_EXIT            =
*     IS_PRINT_LVC             =
*     IS_REPREP_ID_LVC         =
*     I_SCREEN_START_COLUMN    = 0
*     I_SCREEN_START_LINE      = 0
*     I_SCREEN_END_COLUMN      = 0
*     I_SCREEN_END_LINE        = 0
      i_html_height_top        = 10 "抬头部分的高度
*     I_HTML_HEIGHT_END        =
*     IT_ALV_GRAPHICS          =
*     IT_EXCEPT_QINFO_LVC      =
*     IR_SALV_FULLSCREEN_ADAPTER  =
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 = lt_00
    EXCEPTIONS
      program_error            = 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.

*&---------------------------------------------------------------------*
*& Form f_show_detail
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_RS_SELFIELD
*&---------------------------------------------------------------------*
FORM f_show_detail  USING    p_p_rs_selfield.

  DATA: gt_fcat_9001 TYPE lvc_t_fcat,
        gs_layo_9001 TYPE lvc_s_layo.
  DATA: ls_fcat TYPE lvc_s_fcat.

  CLEAR ls_fcat.
  ls_fcat-fieldname = 'PERNR'.
  ls_fcat-coltext   = '序号'.
  ls_fcat-scrtext_l = ls_fcat-scrtext_m = ls_fcat-scrtext_s = ls_fcat-coltext.
  ls_fcat-datatype  = 'SSTR'.
  ls_fcat-hotspot  = 'X' .     " 热点,链接用
  APPEND ls_fcat TO gt_fcat_9001.

  gs_layo_9001-zebra      = 'X'.
  gs_layo_9001-cwidth_opt = 'X'.
  gs_layo_9001-box_fname  = 'SEL'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program      = sy-repid
*     i_callback_pf_status_set = 'FRM_SET_STATUS_9001'
      i_callback_user_command = 'FRM_USER_COMMAND_9001'
      is_layout_lvc           = gs_layo_9001
      it_fieldcat_lvc         = gt_fcat_9001
    TABLES
      t_outtab                = i_detail
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.

ENDFORM.

FORM frm_user_command_9001 USING p_ucomm TYPE sy-ucomm
                          p_rs_selfield TYPE slis_selfield .
  CASE p_ucomm.
    WHEN '&IC1' .
      READ TABLE i_detail ASSIGNING FIELD-SYMBOL(<fs_detail>) INDEX p_rs_selfield-tabindex .
      IF sy-subrc EQ 0.
        CASE p_rs_selfield-fieldname.
          WHEN 'PERNR'.
            IF NOT <fs_detail>-pernr IS INITIAL .
              PERFORM frm_json_ouput.   " 显示具体细节
            ENDIF.

          WHEN ''.
          WHEN OTHERS.
        ENDCASE.

      ENDIF.
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_json_ouput
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_json_ouput  .

  DATA: lv_json     TYPE string.
  DATA: lv_convert  TYPE string,
        lo_json_ser TYPE REF TO cl_trex_json_serializer,
        lv_err_text TYPE string.

  lv_json = '[{"department_code":"50","name":"zuzhi1","parent_code":"50"}]'.

*  CLEAR lv_json.
*  CALL FUNCTION 'ZFM_EHR_BASE64_DECODE'
*    EXPORTING
*      iv_input  = json
*    IMPORTING
*      ev_output = lv_json.
  TRY.
      CALL TRANSFORMATION sjson2html SOURCE XML lv_json
                                     RESULT XML DATA(lv_html).
    CATCH cx_xslt_runtime_error INTO DATA(lo_err).
      lv_err_text = lo_err->get_text( ).
      WRITE: lv_err_text.
      RETURN.
  ENDTRY.

* 显示HTML
  lv_convert = cl_abap_codepage=>convert_from( lv_html ).
  cl_abap_browser=>show_html( html_string = lv_convert ).

ENDFORM.
*&---------------------------------------------------------------------*
*& Form f_call_tran
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_RS_SELFIELD
*&---------------------------------------------------------------------*

FORM f_call_tran USING p_rs_selfield TYPE slis_selfield  .

  SET PARAMETER ID 'PER' FIELD p_rs_selfield-value .
  CALL TRANSACTION 'PA20' ."AND SKIP FIRST SCREEN .

ENDFORM.                    " f_call_tran
*&---------------------------------------------------------------------*
*& Form f_open_folder
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_RS_SELFIELD
*&---------------------------------------------------------------------*
FORM f_open_folder  USING    p_p_rs_selfield CHANGING fs_00 STRUCTURE ls_00.
  DATA: l_file_path LIKE rlgrap-filename .

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mode             = 'O'
      title            = '选择文件'
    IMPORTING
      filename         = l_file_path
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.

  IF sy-subrc = 0.
    fs_00-open_folder = l_file_path . " 将得到的文件的路径赋给当前行的路径
    CLEAR l_file_path .
  ELSE .
    MESSAGE s000 WITH '没有选择文件' .
    fs_00-open_folder = icon_red_light.
  ENDIF.

ENDFORM.
FORM f_build_layout.
  i_layout_lvc-zebra           = 'X' .       " 使ALV界面呈现颜色交替
*  i_layout_lvc-sel_mode        = 'A' .       " 选择模式,“A”在最左端有选择按钮
  i_layout_lvc-box_fname       = 'SEL' .
*  i_layout_lvc-totals_bef      = 'X' .
*  i_layout_lvc-cwidth_opt      = 'X' .       " 自动优化列宽
  i_layout_lvc-detailinit      = 'X' .       " 是否出现细节屏幕
  i_layout_lvc-detailtitl      = '详细内容' . " 细节屏幕标题
  i_layout_lvc-ctab_fname      = 'CELL_COLOR'.   " 单元格颜色设置
  i_layout_lvc-info_fname      = 'LINE_COLOR'.   " 行列颜色
ENDFORM.
FORM f_cell_color .

  " 单元格颜色
  DATA: l_cellcolor TYPE slis_specialcol_alv .

  LOOP AT lt_00 ASSIGNING FIELD-SYMBOL(<fs_00>) .
    IF <fs_00>-num > 100 .
      l_cellcolor-fieldname = 'NUM' .  " 要修改颜色的字段名
      l_cellcolor-color-col = 7 .      " 颜色(1-7)
      l_cellcolor-color-inv = 3 .      " 前景字体(inv代表背景颜色)
      APPEND l_cellcolor TO <fs_00>-cell_color .
      CLEAR l_cellcolor .
    ENDIF.
  ENDLOOP.

ENDFORM.                    " f_cell_color
FORM f_line_color .
  " 更改行的颜色和列的颜色
  DATA: l_i TYPE i .

  LOOP AT lt_00 ASSIGNING FIELD-SYMBOL(<fs_00>) .
    l_i = sy-tabix MOD 2 .
    IF l_i = 0 .
      <fs_00>-line_color = 'C311' .
    ENDIF.
  ENDLOOP.

ENDFORM.                    " f_line_color
FORM frm_sall_data USING p_flag.

  LOOP AT lt_00 ASSIGNING FIELD-SYMBOL(<fs_00>) WHERE sel <> p_flag.
    <fs_00>-sel = p_flag.
  ENDLOOP.

ENDFORM.
" 为ALV标题添加图片,必须用I_CALLBACK_TOP_OF_PAGE
"1.上传图片
*OAER进入参数界面,在“Class name”后面输入“PICTURES”,在“Class Type”后面输入“OT”,在“Object ID”后面输入一个名字,用来标记上传的图片,点击 或按F8进入
*上传图片的主界面,点击下面的“Create”展开“Standard.Doc.Types”双击“屏幕”上传自己的图片,指定好“Description”和“KeyWord”方便以后查找,完成图片的上传
*记下“Object ID”,后面的程序中要用到
FORM f_top_of_page2 .

  DATA: i_header  TYPE slis_t_listheader,
        wa_header TYPE slis_listheader.

  " 定义登录用户的描述
  DATA: l_name TYPE string .
  " 定义登录日期
  DATA: l_date TYPE string .

  " 得到登录用户的描述
  l_name = sy-uname .
  " 拼接制表日期
  CONCATENATE sy-datum+0(4) '.'  sy-datum+4(2) '.' sy-datum+6(2) INTO l_date .

  " Image
  wa_header-typ  = 'H'.
  wa_header-info = 'Z_ALV测试' .
  APPEND wa_header TO i_header .
  CLEAR  wa_header .

  CONCATENATE '制表人:' l_name INTO l_name .
  CONCATENATE '制表日期:' l_date INTO l_date .
  wa_header-typ  = 'S'.
  wa_header-key  = l_name .
  wa_header-info = l_date .
  APPEND wa_header TO i_header .
  CLEAR  wa_header .

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      i_logo             = 'J01'   " OAER中的Object ID
      it_list_commentary = i_header
      i_alv_form         = 'X'.

ENDFORM.                    " f_top_of_page2

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值