SAP ABAP OALV单元格颜色设置

本文介绍如何在SAP ALV Grid中设置单元格的颜色和样式,包括行颜色、单元格颜色和单元格按钮样式。通过具体代码示例展示了不同颜色编码的应用场景及其效果。

OALV单元格颜色设置

效果如下:

完整代码:

*&---------------------------------------------------------------------*
*& Report  ZTEST04
*&
*&---------------------------------------------------------------------*
*&  by cmh
*&  定义单元格颜色
*&---------------------------------------------------------------------*

REPORT  ZTEST04.
TYPESBEGIN OF ilist_s ,
      name1(10),
      name2(10),
      name3(10),
      name4(10),
 END OF ilist_s.
DATAilist TYPE STANDARD TABLE OF ilist_s  WITH HEADER LINE .

DATABEGIN OF list OCCURS 0.
        INCLUDE STRUCTURE ilist .
DATArowcolor(4TYPE ,            "
      cellcolors TYPE lvc_t_scol ,    "单元格颜色
      cellstyles TYPE lvc_t_styl ,    "单元格样式
      celltext   TYPE alv_t_dtv .
DATAEND OF list.

DATAok_code LIKE sy-ucomm.
DATAl_valid(1TYPE c.

DATAgo_grid             TYPE REF TO cl_gui_alv_grid.

DATAgt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat TYPE lvc_s_fcat,
      sla         TYPE lvc_s_layo.

DATAls_fieldcat TYPE lvc_s_fcat.
DATA ls_style TYPE lvc_s_styl .
DATA ls_cellcolor TYPE lvc_s_scol .
DATA ls_celltext     TYPE alv_s_dtv .
*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS handle_button_click
      FOR EVENT button_click OF cl_gui_alv_grid
      IMPORTING es_col_id
                es_row_no.
ENDCLASS.                    "lcl_event_receiver DEFINITION*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_button_click.
    PERFORM test USING es_col_id
                       es_row_no.
  ENDMETHOD.                                                "handle_f4
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
DATAevent_receiver TYPE REF TO lcl_event_receiver.
DATAii TYPE .

START-OF-SELECTION.
  PERFORM frm_fieldcat.
  PERFORM frm_getdata.
  PERFORM frm_layout.
  PERFORM frm_display.





*&---------------------------------------------------------------------*
*&      Form  test
*&---------------------------------------------------------------------*
FORM test  USING    p_es_col_id TYPE lvc_s_col
                    p_es_row_no TYPE lvc_s_roid.
  MESSAGE i899(fiWITH p_es_col_id-fieldname p_es_row_no-row_id .
ENDFORM.                    " test
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT .

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname     'NAME1'.
  ls_fieldcat-scrtext_l     'TITLE1'.
  APPEND ls_fieldcat TO  gt_fieldcat.
  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname     'NAME2'.
  ls_fieldcat-scrtext_l     'TITLE2'.
*    ls_fieldcat-emphasize = 'C610'.
  APPEND ls_fieldcat TO  gt_fieldcat.
  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname     'NAME3'.
  ls_fieldcat-scrtext_l     'TITLE3'.
  APPEND ls_fieldcat TO  gt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname     'NAME4'.
  ls_fieldcat-scrtext_l     'TITLE4'.
  APPEND ls_fieldcat TO  gt_fieldcat.

ENDFORM.                    " FRM_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_GETDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GETDATA .

  list-name1 'A1'.
  list-name2 'B'.
  ls_cellcolor-fname 'NAME1' .
  ls_cellcolor-color-col '5' .
  ls_cellcolor-color-int '1' .
  ls_cellcolor-color-inv '1' .
  APPEND ls_cellcolor TO list-cellcolors .
  APPEND list.

  list-name1 'A2'.
  list-name2 'BB'.
  ls_cellcolor-fname 'NAME2' .
  ls_cellcolor-color-col '3' .
  ls_cellcolor-color-int '1' .
  ls_cellcolor-color-inv '1' .
  APPEND ls_cellcolor TO list-cellcolors .
  APPEND list.

  list-name1 'A3'.
  list-name2 'BBB'.
  list-rowcolor 'C410'.

  ls_style-fieldname 'NAME3' .
  ls_style-style cl_gui_alv_grid=>mc_style_button .       " 按钮样式
*  ls_style-style = cl_gui_alv_grid=>MC_STYLE_HOTSPOT.
  APPEND ls_style TO list-cellstyles .
  ls_celltext-buttoncell 'TEST'.
  APPEND ls_celltext TO list-celltext.
  APPEND list.

  CLEAR list.
  list-name1 'A4'.
  list-name2 'B4'.
  APPEND list.

  CLEAR list.
  list-name1 'A5'.
  list-name2 'B5'.
  APPEND list.

ENDFORM.                    " FRM_GETDATA
*&---------------------------------------------------------------------*
*&      Form  FRM_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_LAYOUT .

  sla-stylefname 'CELLSTYLES'.
  sla-ctab_fname 'CELLCOLORS'.
  sla-info_fname 'ROWCOLOR'.

ENDFORM.                    " FRM_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY .

  WRITE ''.

  CREATE OBJECT go_grid
        EXPORTING
          i_parent cl_gui_container=>screen0.

   CREATE OBJECT event_receiver.
  SET HANDLER event_receiver->handle_button_click FOR go_grid.

  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
*      is_variant                    = gs_variant
      i_save                        'A'
      is_layout                     sla
    CHANGING
      it_outtab                     list[]
      it_fieldcatalog               gt_fieldcat[]
    EXCEPTIONS
      invalid_parameter_combination 1
      program_error                 2
      too_many_lines                3
      OTHERS                        4.

ENDFORM.                    " FRM_DISPLAY

 

 另外附上SAP颜色的编码:

ABAP中的颜色代码是由4位字都组成的

Cxyz

C:color的简写,颜色代码均以C开头

 x:标准色代码,SAP中一共有7个标准色

           y:反转颜色启用/关闭 1/0

            z:增强颜色启用/关闭 1/0

       

      标准色代码一览表

X

颜色

主要用处

1

灰蓝色

抬头、标题栏

2

浅灰色

列表内容

3

黄色

汇总

4

蓝色

关键字

5

绿色

正确

6

红色

错误

7

橙色

控制

 

 

 

 

 

 


 

 

 

 

 


作者:SAP道长   http://blog.youkuaiyun.com/heng0757/article/details/8080679

<think>我们正在处理一个关于ABAP ALV设置单元格颜色的问题。根据用户提供的引用和问题,我们需要总结出设置单元格颜色的方法。 根据引用[2]和[3],设置单元格颜色通常需要以下步骤: 1. 在显示ALV的内表结构中添加一个类型为`LVC_T_SCOL`的字段(通常命名为`CELLCOLOR`或`COLOR`)用于存储单元格颜色信息。 2. 在循环内表时,为需要设置颜色单元格创建颜色结构(类型为`LVC_S_SCOL`),并填充颜色代码(颜色代码由三位组成:COL(颜色代码,1-7),INT(增强颜色,0或1),INV(反转颜色,0或1))。 同时指定要设置颜色的字段名(`FNAME`)。 3. 将颜色结构添加到内表行的颜色字段(即`CELLCOLOR`或`COLOR`)中(这是一个内表,因为一行可能有多个单元格设置颜色)。 4. 在ALV布局中,通过`I_LAYOUT-CELLTAB_FIELDNAME`(或`ctab_fieldname`)指定内表中颜色字段的名称。 另外,引用[4]提到,设置颜色是通过在数据内表中添加一个4位CHAR类型的字段(例如`COLOR`),然后在布局中指定`INFO_FIELDNAME`(或`info_fname`)为该字段名。但是注意,行颜色单元格颜色是不同的,行颜色是整行一个颜色,而单元格颜色可以分别设置。 用户问题明确要求设置单元格颜色,所以我们重点在单元格颜色。 步骤详细说明: 1. 定义内表结构,添加颜色字段: 例如: TYPES: BEGIN OF ty_data, matnr TYPE matnr, " 物料 werks TYPE werks_d, " 工厂 labst TYPE labst, " 库存 " ... 其他字段 cellcolor TYPE lvc_t_scol, " 单元格颜色表 END OF ty_data. 2 在循环内表时,为特定单元格添加颜色: LOOP AT gt_data ASSIGNING <fs_data>. IF <fs_data>-labst = 0. " 例如库存为0时,设置物料字段为红色 DATA(ls_color) = VALUE lvc_s_scol( fname = 'MATNR' " 要设置颜色的字段名 color-col = '6' " 红色,颜色代码:1-7,具体查色卡 color-int = 1 " 增强显示 color-inv = 0 " 不反转 nokeycol = 'X' " 忽略关键列颜色(可选) ). APPEND ls_color TO <fs_data>-cellcolor. ENDIF. ENDLOOP. 3 在ALV布局设置中指定单元格颜色字段: DATA: gs_layout TYPE lvc_s_layo. gs_layout-ctab_fname = 'CELLCOLOR'. " 这里填写内表中颜色字段的名称 4 调用ALV显示函数时传入布局。 注意:颜色代码通常使用1到7,具体颜色可能因主题而异,常见的如: 1:灰色,2:蓝色,3:黄色,4:粉红色,5:绿色,6:红色,7:橙色。 另外,引用[3]中有一个例子,设置周转天数字段为红色,当满足条件时。 根据以上步骤,我们可以编写一个示例代码。 下面提供一个完整的示例程序框架:</think>### ABAP ALV 设置单元格颜色的方法 在 ABAP ALV 中设置单元格颜色需要以下步骤: #### 1. **数据结构准备** 在显示 ALV 的内表中添加颜色字段,类型为 `LVC_T_SCOL`(存储单元格颜色表): ```abap TYPES: BEGIN OF ty_data, matnr TYPE matnr, " 物料号 werks TYPE werks_d, " 工厂 labst TYPE labst, " 库存数量 color TYPE lvc_t_scol, " 单元格颜色表(关键字段) END OF ty_data. DATA: gt_data TYPE TABLE OF ty_data. ``` #### 2. **设置颜色逻辑** 在数据处理循环中,通过条件判断为单元格添加颜色: ```abap LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>). IF <fs_data>-labst = 0. " 库存为0时设置颜色 DATA(ls_color) = VALUE lvc_s_scol( fname = 'LABST' " 目标字段名 color-col = '6' " 颜色代码(6=红色) color-int = '1' " 增强显示(1=开启) color-inv = '0' " 不反转颜色 ). APPEND ls_color TO <fs_data>-color. " 添加到颜色表 ENDIF. ENDLOOP. ``` #### 3. **ALV 布局配置** 在布局参数中指定颜色字段名: ```abap DATA(gs_layout) = VALUE lvc_s_layo( ctab_fname = 'COLOR' " 指向内表的颜色字段 zebra = 'X' " 启用斑马纹 col_opt = 'X' " 自动优化列宽 ). ``` #### 4. **ALV 输出** 调用 ALV 函数时传入布局和字段目录: ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat " 需提前构建字段目录 TABLES t_outtab = gt_data. ``` #### 📌 关键说明 1. **颜色代码**: - `COL`:基础色值(1=灰, 2=蓝, 3=黄, 4=粉, 5=绿, **6=红**, 7=橙) - `INT=1`:启用高亮增强 - `INV=0`:禁用颜色反转 2. **多单元格控制**: 同一行可向 `COLOR` 字段追加多条记录,实现多单元格染色: ```abap APPEND VALUE #( fname='MATNR' color-col=5 ) TO <fs_data>-color. " 物料号绿色 APPEND VALUE #( fname='WERKS' color-col=3 ) TO <fs_data>-color. " 工厂黄色 ``` 3. **字段名一致性**: `FNAME` 必须匹配字段目录中的字段名(区分大小写)[^2][^3]。 #### 效果示例 | 物料号 | 工厂 | 库存 | |--------|------|------| | M001 | 1001 | <span style="color:red">**0**</span> | <!-- 库存为0时红色 --> | M002 | 1002 | 150 | --- ### 相关问题 1. 如何设置整行背景色(非单元格)? 2. ALV 颜色代码与标准色卡的对应关系是什么? 3. 能否根据动态条件(如用户输入)改变单元格颜色? 4. 如何清除已设置的 ALV 单元格颜色? [^1]: SAP ALV 颜色控制包含行、列、单元格三个层级,需使用不同字段存储颜色信息。 [^2]: 单元格颜色必须通过类型 `LVC_T_SCOL` 的内表字段存储,布局中需用 `CTAB_FNAME` 绑定该字段。 [^3]: 颜色结构 `LVC_S_SCOL` 中的 `FNAME` 需严格匹配目标字段名,否则染色无效。 [^4]: 行颜色控制使用 `INFO_FNAME` + 4 位 CHAR 字段,与单元格染色机制不同。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值