ALV中调用Excel inplace时没能传递数据实例解决
2013-05-02 11:50
337 查看
在很多用到ALV的项目开发中,会有调用Excel inplace功能直接在excel中查看数据(sy-ucomm = &VEXCEL), 可是当我们点该按钮是, excel是成功出现了,可是alv grid的数据却没有写到excel中.
下面通过一则简单的实例程序,来介绍问题的解决:
*&-------------------- -------------------------------------------------*
*& Report ZLC_ALV_EXCEL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZLC_ALV_EXCEL.
TABLES MARC.
TYPE-POOLS:SLIS.
DATA: BEGIN OF IT_MARC OCCURS 0,
MATNR LIKE MARC-MATNR,
PSTAT LIKE MARC-PSTAT,
LVORM LIKE MARC-LVORM,
BWTTY LIKE MARC-BWTTY,
XCHAR LIKE MARC-XCHAR,
MMSTA LIKE MARC-MMSTA,
END OF IT_MARC.
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
IT_EVENTS TYPE SLIS_T_EVENT.
SELECT MATNR PSTAT LVORM BWTTY XCHAR MMSTA
INTO TABLE IT_MARC
FROM MARC.
START-OF-SELECTION.
PERFORM FRM_FIELDCAT_SET.
PERFORM FRM_ENVENT_SET.
PERFORM FRM_ALV_DISPLAY.
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT_SET .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
i_structure_name = 'ZLC_MARC'
CHANGING
CT_FIELDCAT = IT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDFORM. " FRM_FIELDCAT_SET
*&---------------------------------------------------------------------*
*& Form FRM_ENVENT_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ENVENT_SET .
DATA PW_EVENT TYPE SLIS_ALV_EVENT.
CLEAR PW_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 1
IMPORTING
ET_EVENTS = IT_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2.
PW_EVENT-FORM = 'FRM_USER_COMMAND'.
MODIFY IT_EVENTS FROM PW_EVENT TRANSPORTING FORM
WHERE NAME = SLIS_EV_USER_COMMAND.
PW_EVENT-FORM = 'FRM_SET_PFSTAT'.
MODIFY IT_EVENTS FROM PW_EVENT TRANSPORTING FORM
WHERE NAME = SLIS_EV_PF_STATUS_SET.
ENDFORM. " FRM_ENVENT_SET
*&---------------------------------------------------------------------*
*& FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM TYPE SY-UCOMM "#EC CALLED
R_SELFIELD TYPE SLIS_SELFIELD.
* IF W_F2CODE = CNS_WCLI.
* READ TABLE IT_DATA
* INTO IW_DATA
* INDEX R_SELFIELD-TABINDEX
* TRANSPORTING KUNNR .
* EXPORT W_KUNNR FROM IW_DATA-KUNNR TO MEMORY ID CNS_KUNNR.
* LE***E PROGRAM.
* ENDIF.
ENDFORM. "FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = IT_FIELDCAT
IT_EVENTS = IT_EVENTS
I_DEFAULT = 'X'
TABLES
T_OUTTAB = IT_MARC
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form FRM_SET_PFSTAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_PFSTAT USING EXTAB TYPE SLIS_T_EXTAB. "#EC CALLED
SET PF-STATUS 'PF_002'.
ENDFORM. " FRM_SET_PFSTAT
此实例得到结果:
通过点击
导出EXCEL,一开始是没有数据。解决办法:在菜单栏 工具---》宏----》安全性---》可靠发行商下勾选‘信任对于visual
Basic项目 ’的访问。
大功告成!
下面通过一则简单的实例程序,来介绍问题的解决:
*&-------------------- -------------------------------------------------*
*& Report ZLC_ALV_EXCEL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZLC_ALV_EXCEL.
TABLES MARC.
TYPE-POOLS:SLIS.
DATA: BEGIN OF IT_MARC OCCURS 0,
MATNR LIKE MARC-MATNR,
PSTAT LIKE MARC-PSTAT,
LVORM LIKE MARC-LVORM,
BWTTY LIKE MARC-BWTTY,
XCHAR LIKE MARC-XCHAR,
MMSTA LIKE MARC-MMSTA,
END OF IT_MARC.
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
IT_EVENTS TYPE SLIS_T_EVENT.
SELECT MATNR PSTAT LVORM BWTTY XCHAR MMSTA
INTO TABLE IT_MARC
FROM MARC.
START-OF-SELECTION.
PERFORM FRM_FIELDCAT_SET.
PERFORM FRM_ENVENT_SET.
PERFORM FRM_ALV_DISPLAY.
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT_SET .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
i_structure_name = 'ZLC_MARC'
CHANGING
CT_FIELDCAT = IT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDFORM. " FRM_FIELDCAT_SET
*&---------------------------------------------------------------------*
*& Form FRM_ENVENT_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ENVENT_SET .
DATA PW_EVENT TYPE SLIS_ALV_EVENT.
CLEAR PW_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 1
IMPORTING
ET_EVENTS = IT_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2.
PW_EVENT-FORM = 'FRM_USER_COMMAND'.
MODIFY IT_EVENTS FROM PW_EVENT TRANSPORTING FORM
WHERE NAME = SLIS_EV_USER_COMMAND.
PW_EVENT-FORM = 'FRM_SET_PFSTAT'.
MODIFY IT_EVENTS FROM PW_EVENT TRANSPORTING FORM
WHERE NAME = SLIS_EV_PF_STATUS_SET.
ENDFORM. " FRM_ENVENT_SET
*&---------------------------------------------------------------------*
*& FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM TYPE SY-UCOMM "#EC CALLED
R_SELFIELD TYPE SLIS_SELFIELD.
* IF W_F2CODE = CNS_WCLI.
* READ TABLE IT_DATA
* INTO IW_DATA
* INDEX R_SELFIELD-TABINDEX
* TRANSPORTING KUNNR .
* EXPORT W_KUNNR FROM IW_DATA-KUNNR TO MEMORY ID CNS_KUNNR.
* LE***E PROGRAM.
* ENDIF.
ENDFORM. "FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = IT_FIELDCAT
IT_EVENTS = IT_EVENTS
I_DEFAULT = 'X'
TABLES
T_OUTTAB = IT_MARC
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form FRM_SET_PFSTAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_PFSTAT USING EXTAB TYPE SLIS_T_EXTAB. "#EC CALLED
SET PF-STATUS 'PF_002'.
ENDFORM. " FRM_SET_PFSTAT
此实例得到结果:
通过点击
导出EXCEL,一开始是没有数据。解决办法:在菜单栏 工具---》宏----》安全性---》可靠发行商下勾选‘信任对于visual
Basic项目 ’的访问。
大功告成!
相关文章推荐
- ALV中调用Excel inplace时没能传递数据实例解决
- ALV中调用Excel, 丢掉前面的0问题解决
- SAP ALV内嵌(In-place)Excel的问与答
- alv使用标准按钮调用excel查看数据时,需要开通对vba工程对象模型的访问
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法 续集
- HTML页面调用JS代码将JSON数据导入到Excel表中,并下载 实例
- 用构造函数在窗体之间传递数据-类的相互调用实例
- ViewController调用顺序问题,解决ViewController之间传递数据失败的问题
- 《对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们》的问题的解决方法
- shopnc 导出Excel数据问题实例 && ajax 获取当前值并传递
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- activity间数据传递实例_人品计算器
- Android之Bundle传递数据详解与实例及Bundle与SharedPreferences的区别
- oracle sqlldr 数据导入错误Field in data file exceeds maximum length解决
- Python修改Excel数据的实例代码
- excel内容导入数据库数据丢失问题的分析几解决方法
- 关于在for循环里调用ajax时只能取到最后一个数据的bug的解决方法
- 解决tomcat在页面传递过程中改变数据编码格式的问题
- Winform实现调用asp.net数据接口实例