ABAP에서 엑셀 파일을 인터널테이블로 바로 업로딩 하는 방법(Source 포함)


SAP 시스템에서 ABAP 프로그램을 개발할 때 엑셀 파일을 ABAP의 인터널테이블(Internal Table)로 업로드 하거나 반대로 인터널테이블을 엑셀 파일로 내려받는 작업을 하는 경우가 많이 있습니다.

SAP ABAP에서 Excel 파일을 인터널테이블로 업로드 하거나 내려받기 하는 하는 방법에는 여러가지가 있습니다.
탭으로 분리된 텍스트 파일을 열어서 처리하는 방법이나 오브젝트 방식으로 처리하는 방법이나 엑셀 파일을 그대로 읽어서 처리하는 방법 등 다양한 방법으로 엑셀 파일을 처리할 수 있습니다.

이번 글에서는 ALSM_EXCEL_TO_INTERNAL_TABLE Function 모듈을 사용하여 ABAP에서 엑셀 파일을 인터널테이블로 바로 업로딩 하는 방법에 대해 설명해 보겠습니다.

ALSM_EXCEL_TO_INTERNAL_TABLE을 사용하여 엑셀 내용을 인터널테이블로 업로드하기 샘플

▼ 아래 화면은 ABAP 프로그램에서 ALSM_EXCEL_TO_INTERNAL_TABLE을 사용하여 엑셀 내용을 인터널테이블로 업로드하기 위한 엑셀 파일 예제입니다.

ALSM_EXCEL_TO_INTERNAL_TABLE을 사용하여 엑셀 내용을 인터널테이블로 업로드하기 샘플

ABAP에서 ALSM_EXCEL_TO_INTERNAL_TABLE을 사용하여 엑셀을 인터널테이블로 업로드하는 소스(Source)

▼ ABAP 프로그램에서 ALSM_EXCEL_TO_INTERNAL_TABLE 함수를 사용하는 실제 예제 소스입니다.

REPORT  ymm0001.
 
DATA:lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE.
FIELD-SYMBOLS <fs> TYPE any.
 
*— 인터널테이블 선언
DATA: BEGIN OF gt_data OCCURS 0,
     name(10),
     kor TYPE i,
     eng TYPE i,
     mat TYPE i,
     soc TYPE i,
     sci TYPE i,
     art TYPE i,
  END OF gt_data.
 
*—– Selection screen designing
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS:p_file  TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
 
 
*—– value request for p_file
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
 
  CALL FUNCTION ‘F4_FILENAME’     ” 파일 선택
    IMPORTING
      file_name = p_file.
 
 
*—– START-OF-SELECTION
START-OF-SELECTION.
 
  CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
    EXPORTING
    filename                 = p_file  ” 불러올 엑셀파일
      i_begin_col             = 1      ” 시작 Column 위치 (아래 추가설명 참조)
      i_begin_row             = 2      ” 시작 Row 위치 (아래 추가설명 참조)
      i_end_col               = 99     ” 마지막 Column 위치 (아래 추가설명 참조)
      i_end_row               = 65536  ” 마지막 Row 위치 (아래 추가설명 참조)
    TABLES
      intern                  = lt_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
 
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.
 

▼ 아래 화면은 ALSM_EXCEL_TO_INTERNAL_TABLE 함수가 실행되고 결과로 채워진 LT_EXCEL 인터널테이블의 내용입니다.

위에서 보여준 예제 엑셀 화면과 비교하면 셀 단위로 인터널테이블 Row가 만들어진 것을 알 수 있습니다.

ABAP에서 ALSM_EXCEL_TO_INTERNAL_TABLE을 사용하여 엑셀을 인터널테이블로 업로드하는 소스


▼ 아래 ABAP 소스는 엑셀의 셀 단위로 만들어진 인터널테이블(LT_EXCEL)을 원래의 엑셀 시트 구조로 만들어 주기 위해 새로운 인터널테이블(GT_DATA)로 APPEND 하는 로직입니다.

*– 아래 AT END OF 를 위해 정렬해줌.
  SORT lt_excel BY row col.
 
*– row와 col의 value로 되어 있는 것을 인터널테이블 구조로 넣어줌.
  LOOP AT lt_excel.
 
    ASSIGN COMPONENT lt_excel-col OF STRUCTURE gt_data TO <fs>.
    <fs> = lt_excel-value.
 
    AT END OF row.      ” row가 마지막일 때 한줄 append
      APPEND gt_data.
      CLEAR gt_data.
    ENDAT.
 
  ENDLOOP.
 

▼ 위의 소스가 실행되고 난 뒤의 GT_DATA 인터널테이블의 모습입니다.

 엑셀 시트와 같은 구조의 인터널테이블이 만들어진 것을 볼 수 있습니다.

ABAP에서 엑셀 파일을 인터널테이블로 바로 업로딩 하는 방법


▼ 이제부터 엑셀 파일이 업로드 된 GT_DATA 인터널테이블을 사용하여 원하는 작업을 수행하면 됩니다.

*– 인터널테이블을 활용하여 작업 진행
  LOOP AT gt_data.
    ……
  ENDLOOP.

예제 소스에 대한 추가 설명

1. 예제 프로그램에서는 i_begin_row 값을 2로 해준 이유는 엑셀에서 첫 번째 row가 과목이름을 표시한 텍스트 문자이기 때문입니다. 인터널테이블의 두 번째 필드부터 정수 타입인데 텍스트를 넣게 되면 오류가 발생하게 됩니다.
마찬가지로 NAME을 빼고 점수만 가지고 와야 한다면 i_begin_col 값을 2로 해주면 됩니다.

2. 위 Function 모듈이 실행될 때 ‘UPLOAD_OLE’ Exceptions 오류가 발생한다면 i_end_col 값과 i_end_row 값을 확인해 보길 바랍니다. 최대 열과 최대 행이 초과할 경우 해당 오류가 발생하게 됩니다. (기타 다른 이유로도 발생함)
xls이면 i_end_col = 256,  i_end_row = 65536
xlsx이면 i_end_col = 16384,  i_end_row = 1048576





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기