728x90
반응형
실습
엑셀파일을 인터널테이블에 담아 ALV로 출력해주는 실습을 진행한다.
[프로그램 로직]
[데이터 선언부]
REPORT zs1d11_026.
TYPES truxs_t_text_data(4096) TYPE c OCCURS 0.
TYPES: BEGIN OF itab,
seqnr TYPE zs1d11t_01-seqnr,
team TYPE zs1d11t_01-team,
note TYPE zs1d11t_01-note,
END OF itab.
DATA: gv_rc TYPE i,
gv_file TYPE localfile,
gt_file TYPE filetable,
gv_data TYPE truxs_t_text_data,
g_salv TYPE REF TO cl_salv_table, "salv
g_frontend TYPE REF TO cl_gui_frontend_services. "업로드용 파일
DATA : gs_itab TYPE itab,
gs_tab TYPE zs1d11t_01,
gt_itab TYPE TABLE OF itab,
gs_excel TYPE alsmex_tabline, "엑셀 업로드 담을 wa
gt_tab TYPE TABLE OF zs1d11t_01,
gt_excel TYPE TABLE OF alsmex_tabline. "엑셀 업로드 데이터 담을 int
CONSTANTS : c_filter TYPE string VALUE
'EXCEL FILES (*.XLSX)|*.XLSX|EXCEL FILES (*.XLS)|*.XLS|'.
FIELD-SYMBOLS <fs>.
[SELECTION SCREEN]
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-000.
PARAMETERS : p_file TYPE localfile.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS : p_alsm RADIOBUTTON GROUP rd1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 4(30) TEXT-c01. "위치(길이)
PARAMETERS : p_text RADIOBUTTON GROUP rd1.
SELECTION-SCREEN COMMENT 38(30) TEXT-c02.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
[INITIALIZATION]
" OBJECT 생성
CREATE OBJECT g_frontend.
[AT SELECTION-SCREEN]
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM get_filepath. " 파일 경로 조회
[START-OF-SELECTION]
CHECK p_file IS NOT INITIAL.
" ALSM_EXCEL_TO_INTERNAL_TABLE 펑션 실행 예제
IF p_alsm = 'X'.
PERFORM call_func1.
" TEXT_CONVERT_XLS_TO_SAP 펑션 실행 예제
ELSE.
PERFORM call_func2.
ENDIF.
[END-OF-SELECTION]
CHECK gt_itab[] IS NOT INITIAL.
PERFORM create_salv.
[FORM문]
*파일 경로 가져오는 로직
FORM get_filepath .
CLEAR : gv_rc, gt_file[].
CALL METHOD g_frontend->file_open_dialog
EXPORTING
file_filter = c_filter
initial_directory = 'C:'
default_filename = space
CHANGING
file_table = gt_file
rc = gv_rc
EXCEPTIONS
OTHERS = 1.
CLEAR p_file.
READ TABLE gt_file INTO p_file INDEX 1.
ENDFORM. " GET_FILEPATH
* ALSM_EXCEL_TO_INTERNAL_TABLE 펑션 실행 예제
FORM call_func1 .
* P_FILE에 선택한 엑셀파일 이름, 경로값이 들어가고 INITIAL이 아니기때문에 구문수행하고
* P_ALSM에 X가 들어간다 CALL_FUN1으로 들어간다
* 펑션 수행하고 나면 GT_EXCEL에 3(열)*10(행), 30줄이 들어가게 된다
" 엑셀 업로드
CLEAR gt_excel[].
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 3
i_end_row = 10000 "만건까지 가능
TABLES
intern = gt_excel[]
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
* GT_EXCEL에 값이 있으니까 NOT INITIAL구문을 타고
* GT_ITAB는 COL의 첫번째줄
" 업로드된 엑셀을 LINE/COL 별로 MOVE
IF gt_excel[] IS NOT INITIAL.
CLEAR gt_itab[].
LOOP AT gt_excel INTO gs_excel.
UNASSIGN <fs>.
ASSIGN COMPONENT gs_excel-col OF STRUCTURE gs_itab TO <fs>.
IF <fs> IS ASSIGNED.
<fs> = gs_excel-value.
ENDIF.
AT END OF row. "마지막 줄일때
APPEND gs_itab TO gt_itab.
CLEAR gs_itab.
ENDAT.
ENDLOOP.
ENDIF.
ENDFORM. " CALL_FUNC1
FORM call_func2 .
CLEAR gt_itab[].
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = 'X' " 첫라인 삭제
i_tab_raw_data = gv_data
i_filename = p_file
TABLES
i_tab_converted_data = gt_itab[]
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
ENDFORM. " CALL_FUNC2
FORM create_salv . "SALV 생성 및 실행
DATA : lr_dspset TYPE REF TO cl_salv_display_settings.
DATA: LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE.
" SALV 생성
cl_salv_table=>factory( IMPORTING r_salv_table = g_salv
CHANGING t_table = gt_itab ).
" zebra stripes, 줄무늬
lr_dspset = g_salv->get_display_settings( ).
lr_dspset->set_striped_pattern( abap_true ).
"너비최적화
LR_COLUMNS = G_SALV->GET_COLUMNS( ).
LR_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ).
" SALV 실행
g_salv->display( ).
ENDFORM. " CREATE_SALV
[실행 화면]
서치헬프를 누르면 내컴퓨터의 파일들이 나온다. 엑셀파일을 선택하고 실행해주면
엑셀파일의 데이터가 인터널테이블에 들어가고 인터널테이블을 ALV로 뿌려준다.
728x90
반응형
'ABAP' 카테고리의 다른 글
ALV (0) | 2023.02.16 |
---|---|
엑셀 업로드 + BDC (0) | 2023.02.16 |
BDC 프로그램 (0) | 2023.02.16 |
Field-symbols 2 (0) | 2023.02.16 |
Field-symbols 1 (0) | 2023.02.16 |
댓글