`

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. 问题解决效果
分享到:
评论

相关推荐

    ALV导出数据到EXCEL时数据丢失位数的解决方法

    解决ALV导出数据到Excel时数据丢失位数的问题需要解决条件2和条件3,具体来说,就是在做ALV Fieldcat的时候,需要指定参考表和参考字段,并且确保列的表头文本比实际显示的数据长。这将避免数据丢失位数的问题,确保...

    ALV导出excel时窜行

    然而,在实际操作中,用户经常会遇到使用ALV导出数据到Excel文件时数据窜行的问题,这会导致导出后的Excel数据无法正确显示,从而影响数据处理和分析。为了解决这一问题,本文将详细探讨可能导致窜行的两个主要原因...

    abap-ALV.rar_ABAP系统ALV_abap_abap开发alv

    描述中提到“ABAP ALV总结,ALV格式,REUSE_ALV_GRID_DISPLAY_LVC函数使用”,这表明我们将重点关注ALV的基本概念、数据格式以及如何通过REUSE_ALV_GRID_DISPLAY_LVC函数来实现ALV的显示。 ALV格式通常涉及如何组织...

    ABAP ALV取消整数小数点后面的0

    在ABAP编程中,ABAP ALV(ABAP List Viewer)是一个强大的工具,用于生成和...这种方法使得ALV无法进行无效的总计计算,从而解决了用户界面的显示问题。在实际应用中,应根据具体需求调整代码,确保用户体验得到改善。

    ABAP开发ALV中自定义按钮实现

    在`REUSE_ALV_GRID_DISPLAY`的调用中,需要添加`I_CALLBACK_PF_STATUS_SET`和`I_CALLBACK_USER_COMMAND`参数,分别传入之前定义的GUI状态常量,这样ALV就能识别并处理自定义按钮的事件。 例如,当用户点击“Print”...

    ALV中文教程(超经典)

    最后,调用屏幕并在PBO(Process Before Output)模块中调用ALV相关的方法来显示ALV,在PAI(Process After Input)模块中处理用户的输入。 ### 结论 ALV是SAP系统中一种非常强大且灵活的数据展示工具。通过掌握...

    ALV OO 模板

    ALV(Application List Viewer)是SAP系统中用于显示列表数据的一种标准工具,它提供了丰富的功能,如排序、筛选、分组等。在ABAP语言中,ALV有两种主要的实现方式:传统的模块化方法(Procedural)和面向对象的方法...

    ABAP OO去掉ALV中的标准工具栏

    在ABAP面向对象编程(ABAP OO)中,经常需要对ALV(Application List Viewer)进行定制化的控制,包括移除或隐藏某些默认显示的工具栏功能。这通常是为了提供更简洁、更符合业务需求的用户界面。本文将详细介绍如何...

    SAP ALV Grid资料整理 (很全面)

    4. 事件处理程序:如果我们想在 ALV Grid 中触发事件,可以通过事件处理类来实现,必须注册一个事件处理类的实例来处理 ALV Grid 的事件。 5. 附加数据:通过 ALV 的其他一些参数可以用来设置 ALV Grid 的其他的一些...

    alv使用 alv使用

    在SAP ABAP编程中,通常在`start-of-selection`事件中获取数据,然后定义表格布局和列信息,最后调用`cl_salv_table`类来显示ALV。 以下是一个简单的ALV程序编写示例: ```abap data: i_fieldcat_alv type slis_t_...

    SAP ABAP ALV 详解

    例如,使用 REUSE_ALV_COMMENTARY_WRITE 函数可以在 ALV 中输出表头,应在 ALV 的 TOP-OP-PAGE 事件中调用。 ALV 是 SAP 系统中的一个强大工具,提供了丰富的列表输出功能和交互功能,可以满足不同的业务需求。

    [ABAP]Function实现ALV Table 二:ALV的弹出窗口形式

    在ABAP(Advanced Business Application Programming)中,ALV(ABAP List Viewer)是SAP提供的一种用于显示数据表的标准化接口。本篇我们将深入探讨如何使用Function来实现ALV Table的弹出窗口形式,这对于创建用户...

    在ALV里编写回车事件

    1. **ALV**: ALV是一种用于在SAP GUI中展示表格数据的方法,它提供了丰富的功能来定制列表视图。 2. **事件**: 在编程中,事件通常指的是由用户或其他系统组件触发的动作,如点击按钮、按下键盘键等。 3. **事件...

    SAP ALV总结 ALV总结

    - **数据输出**:在F_DISPLAY子FORM中,调用REUSE_ALV_GRID_DISPLAY_LVC函数,将内表中的数据传递给ALV进行显示。 2. 添加表头标题 - **添加参数**:为了自定义表头,需要在调用REUSE_ALV_GRID_DISPLAY_LVC函数时...

    ALV.rar_SAP_abaP ALV_abap_alv_sap alv

    在SAP系统中,ALV(Accelerated List Viewer)是一种用于数据展示的工具,它提供了标准的表格形式来显示数据库查询结果。ALV是ABAP编程的重要组成部分,它简化了复杂数据的可视化处理。本篇将深入探讨如何通过ABAP...

    OOALV常用功能完整简例

    通过学习和理解这些知识点,开发者可以更好地掌握如何在SAP系统中创建和使用面向对象的ALV报表,为用户提供功能丰富、界面友好的报表解决方案。同时,开发者还能够对报表进行个性化定制,以满足企业内部的特定需求,...

    alv abap sap 总结

    最后,在子 FORM(如 F_DISPLAY)中,通过调用相应的 ALV 函数(如 `REUSE_ALV_GRID_DISPLAY` 或 `REUSE_ALV_GRID_DISPLAY_LVC`),将内表数据传递给 ALV 进行显示。 1. 添加表头标题: 要添加表头,可以在显示 ...

    ABAP-ALV进阶

    ALV 菜单栏提供了多种功能,包括细节按钮、升序排列、降序排列、设置过滤器、打印预览、Microsoft Excel、字处理、本地文件、邮件收件人、图形和更改布局等。 2. ALV 标题栏 ALV 标题栏主要是用来显示一些抬头信息...

    ABAP中的ALV操作

    在ABAP中,ALV(Accelerated List Viewer)是一种用于显示和编辑表格数据的图形用户界面组件。在给定的代码示例中,展示了如何创建一个ALV网格,并处理用户对数据的更改,如删除行。以下是关键知识点的详细解释: 1...

    alvtree完全展开合并讲解.docx

    在 SAP 系统中,ALVTREE 是一种用于展示层级数据的控件,它与标准的 TREE 控件有所不同。在标准的 ALVTREE 实现中,并没有提供预置的完全展开和完全合并的功能,因此在实际应用中,我们需要通过自定义的方式来实现...

Global site tag (gtag.js) - Google Analytics