0
点赞
收藏
分享

微信扫一扫

Demo:上载Excel数据

pipu 2022-10-14 阅读 85

效果图

Demo:上载Excel数据_上载

最近写了几个上载的程序,这里做个demo,用的时候copy过去改改,省事儿


代码

REPORT zlm_upload.
DATA:ls_layout TYPE slis_layout_alv.
DATA:gv_stop TYPE flag.
DATA: gt_data TYPE TABLE OF t001,
gw_data LIKE LINE OF gt_data.

TABLES: sscrfields.

TYPE-POOLS: slis,icon.
DATA it_exclude TYPE TABLE OF sy-ucomm.

SELECTION-SCREEN: FUNCTION KEY 1,FUNCTION KEY 2,
FUNCTION KEY 3,FUNCTION KEY 4,FUNCTION KEY 5.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-st1.
*select-options:
* s_ FOR
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-st2.
PARAMETERS:
p_file LIKE rlgrap-filename ."OBLIGATORY. "上传文件路径
SELECTION-SCREEN END OF BLOCK b2.



INITIALIZATION.

"可以考虑去掉标准的那个执行按钮,也可以保留
* APPEND 'ONLI' TO it_exclude.
* CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
* EXPORTING
* p_status = sy-pfkey
* TABLES
* p_exclude = it_exclude.

sscrfields-functxt_01 = text-f01."'DISPLAY'.
sscrfields-functxt_02 = text-f02." uplaod
sscrfields-functxt_03 = text-f03." Down Template

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = p_file.


AT SELECTION-SCREEN.


CASE sscrfields-ucomm.
WHEN 'FC01'. "DISPLAY
* PERFORM frm_display.
WHEN 'FC02'. " uplaod

PERFORM frm_upload_data.

ls_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
i_callback_program = sy-repid "
i_structure_name = 'T001'
TABLES
t_outtab = gt_data.
WHEN 'FC03'. " Down Template
* PERFORM frm_down_tmplt.
WHEN 'ONLI'. "F8
* PERFORM frm_display.
WHEN OTHERS.
ENDCASE.

.


*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_upload_data .
FIELD-SYMBOLS: <f1>. "#EC *
DATA: l_i_xlstmp TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA: l_col TYPE i.

CLEAR l_i_xlstmp.
REFRESH: l_i_xlstmp,gt_data.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1“从第一列开始
i_begin_row = 2 “从第二行开始
i_end_col = 30 “到第30列
i_end_row = 30000
TABLES
intern = l_i_xlstmp
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc NE 0 .
gv_stop = 'X' .
MESSAGE s208(00) WITH 'Upload failed'(t04). "#EC *
ENDIF.
CHECK gv_stop = space .
*-判断是否上载了 数据
DESCRIBE TABLE l_i_xlstmp LINES l_col.
IF l_col = 0.
MESSAGE s208(00) WITH 'No data in file'(t03). .
gv_stop = 'X'.
ENDIF.
CHECK gv_stop = space .
SORT l_i_xlstmp BY row col.
LOOP AT l_i_xlstmp.
l_col = l_i_xlstmp-col.
ASSIGN COMPONENT l_col OF STRUCTURE gw_data TO <f1>.
<f1> = l_i_xlstmp-value.
AT END OF row.
APPEND gw_data TO gt_data.
CLEAR: gw_data.
ENDAT.
ENDLOOP.


ENDFORM. " FRM_UPLOAD_DATA



至于是否有校验,校验位置自己考虑下就行了,就是个简单的demo



Demo:上载Excel数据_文件路径_02






举报

相关推荐

0 条评论