`

ALV中调用Excel, 丢掉前面的0问题解决

阅读更多
Bob 发表于 ABAP 分类,标签: ALV, Excel
在sdn中看到有人问这个问题, 于是做个简单的例子来说明如何避免, 或者说解决这个问题.


1. 写个小程序, 用alv来显示表vbak的内容.

*&---------------------------------------------------------------------* 
*& Report  ZALV_INPLACE 
*& 
*&---------------------------------------------------------------------* 
*& 
*& 
*&---------------------------------------------------------------------* 
REPORT  zalv_inplace. 
*&---------------------------------------------------------------------* 
*     TABLES 
*&---------------------------------------------------------------------* 
TABLES:vbak. 
*&---------------------------------------------------------------------* 
*-->TYPE DEFINITION 
*&---------------------------------------------------------------------* 
TYPES: BEGIN OF ty_tab. 
INCLUDE TYPE vbak. 
TYPES:END OF ty_tab. 
*&---------------------------------------------------------------------* 
*     SELECTION-SCREEN 
*&---------------------------------------------------------------------* 
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE text-b02. 
SELECT-OPTIONS s_vbeln for vbak-vbeln. 
SELECTION-SCREEN: END OF BLOCK b01. 
*&---------------------------------------------------------------------* 
*-->CLASS DEFINITION DEFERRED 
*&---------------------------------------------------------------------* 
CLASS lcl_layout DEFINITION DEFERRED. 
CLASS lcl_fieldcat    DEFINITION DEFERRED. 
CLASS lcl_data        DEFINITION DEFERRED. 
CLASS lcl_event       DEFINITION DEFERRED. 
*&---------------------------------------------------------------------* 
*--> Global data definitions for ALV 
*&---------------------------------------------------------------------* 
*--- ALV Grid instance reference 
DATA ref_alv TYPE REF TO cl_gui_alv_grid . 
*--- Custom container instance reference 
DATA ref_con TYPE REF TO cl_gui_custom_container . 
*--Data for screen command 
DATA: 
  save_ok LIKE sy-ucomm, 
  ok_code LIKE sy-ucomm. 
DATA: var TYPE disvariant. 
*&---------------------------------------------------------------------* 
*-->CLASS DATA DEFINITION 
*&---------------------------------------------------------------------* 
DATA  ref_layout TYPE REF TO lcl_layout. 
DATA  ref_fieldcat TYPE REF TO lcl_fieldcat. 
DATA  ref_data     TYPE REF TO lcl_data. 
DATA  ref_event    TYPE REF TO lcl_event. 
DATA: itab TYPE TABLE OF vbak. 
*&---------------------------------------------------------------------* 
*-->CLASS DEFINITION 
*&---------------------------------------------------------------------* 
CLASS lcl_layout DEFINITION. 
PUBLIC SECTION. 
DATA: s_layout TYPE lvc_s_layo . 
METHODS: prepare_layout. 
ENDCLASS.                    "lcl_layout DEFINITION 
*----------------------------------------------------------------------* 
*       CLASS lcl_fieldcat DEFINITION 
*----------------------------------------------------------------------* 
* 
*----------------------------------------------------------------------* 
CLASS lcl_fieldcat DEFINITION. 
PUBLIC SECTION. 
DATA: it_fieldcat TYPE lvc_t_fcat. 
METHODS: prepare_fieldcat. 
PRIVATE SECTION. 
DATA: s_fieldcat TYPE lvc_s_fcat. 
ENDCLASS.                    "lcl_fieldcat DEFINITION 
*----------------------------------------------------------------------* 
*       CLASS lcl_data DEFINITION 
*----------------------------------------------------------------------* 
* 
*----------------------------------------------------------------------* 
CLASS lcl_data DEFINITION. 
PUBLIC SECTION. 
DATA:itab TYPE TABLE OF ty_tab. 
data:itab_del type TABLE OF ty_tab. 
TYPES: ttab TYPE TABLE OF ty_tab. 
METHODS: prepare_data. 
*    METHODS: update_color CHANGING itab TYPE ttab. 
PRIVATE SECTION. 
DATA: rs_data TYPE REF TO ty_tab. 
ENDCLASS.                    "lcl_data DEFINITION 
*----------------------------------------------------------------------* 
*       CLASS lcl_event DEFINITION 
*----------------------------------------------------------------------* 
* 
*----------------------------------------------------------------------* 
CLASS lcl_event DEFINITION. 
PUBLIC SECTION. 
METHODS: handle_before_user_command FOR EVENT before_user_command 
OF cl_gui_alv_grid IMPORTING e_ucomm. 
METHODS:handle_user_command 
FOR EVENT user_command OF cl_gui_alv_grid 
IMPORTING e_ucomm sender. 
ENDCLASS.                    "lcl_event DEFINITION 
*----------------------------------------------------------------------* 
*       CLASS lcl_event IMPLEMENTATION 
*----------------------------------------------------------------------* 
* 
*----------------------------------------------------------------------* 
CLASS lcl_event IMPLEMENTATION. 
METHOD handle_before_user_command. 
CASE e_ucomm. 
WHEN '&VEXCEL'. 
BREAK-POINT. 
ENDCASE. 
ENDMETHOD.                    "handle_data_changed_finished 
METHOD handle_user_command. 
ENDMETHOD.                    "handle_data_changed_finished 
ENDCLASS.                    "lcl_event IMPLEMENTATION 
*&---------------------------------------------------------------------* 
*-->CLASS IMPLEMENTATOIN 
*&---------------------------------------------------------------------* 
CLASS lcl_layout IMPLEMENTATION. 
METHOD prepare_layout. 
    s_layout-smalltitle ='X' . 
    s_layout-grid_title ='SIH Project Development List'(099). 
    s_layout-sel_mode ='A' . 
ENDMETHOD.                    "prepare_layout 
ENDCLASS.                    "lcl_layout IMPLEMENTATION 
*----------------------------------------------------------------------* 
*       CLASS lcl_fieldcat IMPLEMENTATION 
*----------------------------------------------------------------------* 
* 
*----------------------------------------------------------------------* 
CLASS lcl_fieldcat IMPLEMENTATION. 
METHOD prepare_fieldcat. 
FIELD-SYMBOLS: <fcat> TYPE lvc_s_fcat. 
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' 
EXPORTING 
        i_structure_name       = 'VBAK' 
CHANGING 
        ct_fieldcat            = it_fieldcat 
EXCEPTIONS 
        inconsistent_interface = 1 
        program_error          = 2 
OTHERS                 = 3. 
loop at it_fieldcat ASSIGNING <fcat>. 
case <fcat>-fieldname. 
when 'VBELN'. 
*            <fcat>- 
endcase. 
endloop. 
ENDMETHOD.                    "prepare_fieldcat 
ENDCLASS.                    "lcl_fieldcat IMPLEMENTATION 
*----------------------------------------------------------------------* 
*       CLASS lcl_data IMPLEMENTATION 
*----------------------------------------------------------------------* 
* 
*----------------------------------------------------------------------* 
CLASS lcl_data IMPLEMENTATION. 
METHOD prepare_data. 
*--->Get data 
SELECT * FROM VBAK INTO CORRESPONDING FIELDS OF TABLE itab 
WHERE VBELN IN S_VBELN. 
ENDMETHOD.                    "prepare_data 
"update_color 
ENDCLASS.                    "lcl_data IMPLEMENTATION 
START-OF-SELECTION. 
* Call alv grid screen 
CALL SCREEN 9000. 
*&---------------------------------------------------------------------* 
*&      Module  INIT_SCREEN  OUTPUT 
*&---------------------------------------------------------------------* 
MODULE init_screen OUTPUT. 
SET PF-STATUS 'STAT'. 
PERFORM frm_display_alv. 
ENDMODULE.                 " INIT_SCREEN  OUTPUT 
*&---------------------------------------------------------------------* 
*&      Module  USER_COMMAND  INPUT 
*&---------------------------------------------------------------------* 
MODULE user_command INPUT. 
data: la type c. 
  save_ok = ok_code. 
CASE save_ok. 
WHEN 'BACK' OR 'EXIT' OR 'CANC'. 
LEAVE to SCREEN 0. 
ENDCASE. 
ENDMODULE.                 " USER_COMMAND_9000  INPUT 
*&---------------------------------------------------------------------* 
*&      Form  frm_display_alv 
*&---------------------------------------------------------------------* 
FORM frm_display_alv . 
*  Local data definition 
DATA: var TYPE disvariant.  "Variant 
IF ref_alv IS INITIAL. 
*-->Create customer container 
CREATE OBJECT ref_con 
EXPORTING 
        container_name = 'ALV_CON'. 
*-->Create alv grid 
CREATE OBJECT ref_alv 
EXPORTING 
        i_parent = ref_con. 
*-->Create fieldcatlog for alv 
CREATE OBJECT ref_fieldcat. 
CALL METHOD ref_fieldcat->prepare_fieldcat. 
*-->Set layout property 
CREATE OBJECT ref_layout. 
CALL METHOD ref_layout->prepare_layout. 
*-->Get data. 
CREATE OBJECT ref_data. 
CALL METHOD ref_data->prepare_data. 
*-->Register event 
CREATE OBJECT ref_event. 
SET HANDLER ref_event->handle_before_user_command FOR ref_alv. 
SET HANDLER ref_event->handle_user_command FOR ref_alv. 
* Register edit events 
CALL METHOD ref_alv->register_edit_event 
EXPORTING 
        i_event_id = cl_gui_alv_grid=>mc_evt_enter. 
*-->Display data 
    var-report      = sy-repid. 
CALL METHOD ref_alv->set_table_for_first_display 
EXPORTING 
        is_variant                    = var 
        i_save                        = 'A' 
        i_default                     = 'X' 
        is_layout                     = ref_layout->s_layout 
CHANGING 
        it_outtab                     = ref_data->itab 
        it_fieldcatalog               = ref_fieldcat->it_fieldcat 
EXCEPTIONS 
        invalid_parameter_combination = 1 
        program_error                 = 2 
        too_many_lines                = 3 
OTHERS                        = 4. 
ELSE. 
*-->Refresh display 
CALL METHOD ref_alv->refresh_table_display. 
ENDIF. 
ENDFORM.                    " frm_display_alv
 

2. 问题现象重现

  执行上面的程序,效果如下:





3. fieldcat设定

设置如下就可以显示前导零的问题
when 'VBELN'. 
            <fcat>-NO_CONVEXT = 'X'.

4. 问题解决效果
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics