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


在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. 问题现象重现

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

clip_image002

clip_image004

3. fieldcat设定

when ‘VBELN’.
<fcat>-NO_CONVEXT = ‘X’.

4. 问题解决效果

clip_image002[9]

然后我们在看excel inplace

clip_image004[5]

clip_image002[11]


About The Author

从事SAP行业有些年头,对SAP技术稍有了解; 如无特别声明,本博客文章为原创,转载请注明; 博主MSN:xuchunbo0901@hotmail.com; 博主邮箱:bob.xu@abaptech.com。

5 Comments

  1. 学习 说道:

    这个问题确实很值得学习,mark

  2. txfirst 说道:

    评论
    这不是个好办法,最好的办法是参考一个这个字段原来的table,就可以搞定了。

    • Bob 说道:

      恩, 确实,只是临时起意. 也不一定要这个字段原来的table, 完全可以自己定义一个, 也可以添加自己定义conversion rule.

  3. 匿名 说道:

    如果以[本地文件]->[电子表格]这种方式导出,怎么输出前0啊
    谢谢1

  4. 匿名 说道:

    FDGFDF

Leave A Reply


注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

无觅相关文章插件,快速提升流量