728x90

# 시작하기 전 


# ABAP2XLSX 설치가 되어있어야 한다. 

2024.09.04 - [.ABAP/..Excel, EMail] - SAP ABAP2XLSX 설치( ABAPGIT )

 

SAP ABAP2XLSX 설치( ABAPGIT )

# 00. ABAP2XLSX 설치하기 전# ABAP GIT이 설치가 완료되어있어야 하기 때문에 설치가 안되었다면 다음 링크를 타서 설치해 보자.2024.09.03 - [.SAP/..ABAP] - SAP AbapGit 설치 SAP AbapGit 설치#00. ABAPGIT...# 프로젝

potato98.tistory.com

 

 

# OLE란?


# 앞에 썼던 OLE를 참고해 보자. 

2023.07.10 - [.ABAP/..Excel, EMail] - SAP OLE Excel 정리

 

SAP OLE Excel 정리

글..원래 글을 많이 안 쓰고 사진이나 예제를 통해서 하는데 이번에는 어쩔 수 없이 많이 썼어요...  SAP OLE란 OLE( Object Linking and Embedding )를 사용해서 응용 프로그램을 추가로 열지 않고 보고서

potato98.tistory.com

 

 

# 우리가 해야 할 것은 [ ABAP2XLSX ]을 이용한 OLE이다.

# 엑셀 양식에 맞춰서 다운로드하는 기능을 구현해 보자. 

 

 

 

# 우선 엑셀 양식은 다음과 같이 있다고 예를 들어보자. 


# [ SCARR ] Sheet # 

 

# [ SCUSTOM ] Sheet # 

 

# ABAP2XLSX을 사용할 때에는 다음과 같이 나눠야 한다. 

- [ Sheet

- [ Table

- [ Line

- [ Cell

이다. 

 

# 그렇기 때문에, 양식도 그에 맞춰서 나눠보자. ( 여기서는 [ Line ]은 [ Table ]과 같은 방식이기 때문에 빼겠다. )

 

 

# 01. Excel 양식 변경 


# [ SCARR ] Sheet #

 

# 01.  우선 [ Table ]을 다음과 같이 변경해주어야 하며, 필드는 내가 원하는 필드로 설정하면 된다.

# 중요한 것은 "   [     ]  "  항상 대괄호로 감싸주자. 

 

# 02. [ Table ]과 [ LINE ] 같은 경우에는 Excel에서 정의를 해주어야 하기 때문에 우선 해당 라인선택해야 한다. 

 

# 03. 그다음에는 [ 상단 ] -> [ 수식 ] -> [ 이름 정의 ]를 클릭해서, [ 이름 ]의 을 넣고 기억해야 한다. 

 

# 04. 이제 남은 [ CELL ]을 다음과 같이 변수로 변경해 보자. 

 

# [ SCUSTOM ] Sheet #

# 01. 이 양식도 위에서 했던 것처럼 양식을 설정해 보자. 

 

# 02. 이름 정의는 다음과 같이 설정했다.

 

# 03. 그러면 이제 끝이다..! 이제 프로그램 설정을 해보자. 

 

 

 

# 02. 엑셀 양식 구조 설정


# 엑셀 양식에 맞기 [ TYPES ]의 구조를 맞춰보자. 

 

# 여기서 중요한 것은 [ Table ]을 선언할 때는 위에서 선언했던 이름과 똑같이 가져가야 한다. # 

 

# 우선 [ SCARR ] Sheet Deep Structure 설정 #

- 상단 [ Table ] 

- 하단 [ Cell ] 

 

# [ SFLIGHT ] Sheet Deep Structure 설정 #

- 상단 [ Table ] 

- 하단 [ Cell ] 

 

# 03. 해당 Sheet, 데이터 가공하기 


# 01. 우선 [ SCARR ] Table에서 데이터를 가져와서 [ ITEM01 ]에 넣어보자. 

DATA:
  LT_SCARR TYPE TABLE OF SCARR,
  LS_SCARR TYPE SCARR.

FIELD-SYMBOLS
  <LS_ITEM01> TYPE TY_S_ITEM01.

SELECT *
  FROM SCARR
  INTO CORRESPONDING FIELDS OF TABLE LT_SCARR.

* ITEM01
 LOOP AT LT_SCARR INTO LS_SCARR.

   APPEND INITIAL LINE TO GS_SHEET1-ITEM01 ASSIGNING <LS_ITEM01>.

   <LS_ITEM01>-CARRID   = LS_SCARR-CARRID.
   <LS_ITEM01>-CARRNAME = LS_SCARR-CARRNAME.
   <LS_ITEM01>-URL      = LS_SCARR-URL.

 ENDLOOP.

* DAY 값넣기
  GS_SHEET1-DAY = SY-DATUM.

 

# 02. 이제 남은 [ Day ] 을 넣어보자. 여기서는 간단하게 하기 때문에 상황에 맞춰서 사용하면 된다. 

 

# 03. 다음은 [ SCUSTOM ] Table에서 데이터를 가져와서 [ ITEM02 ]의 값과 [ Day ] 값을 넣어보자.

# [ SCUSTOM ] Table에서는 50개만 가져와보자. 

 

# 04. ABAP2XLSX을 통해 [ Excel ] 설정해 보자. 


# 01. 앞에서 만들었던 데이터를 [ Excel ]과 매핑하기 위해서 다음과 같이 설정해 보자. 

DATA:
  LO_DATA TYPE REF TO ZCL_EXCEL_TEMPLATE_DATA.


CREATE OBJECT LO_DATA.
  LO_DATA->ADD( IV_SHEET = 'SCARR'   IV_DATA = GS_SHEET1 ).
  LO_DATA->ADD( IV_SHEET = 'SCUSTOM' IV_DATA = GS_SHEET2 ).

 

# 02. 이제 엑셀 양식어디서 가져오냐에 따라서 갈라지게 된다. 

# 여기서 선택이 있다 #

1. 파일 경로를 통해서 엑셀 양식을 가져오는 방식.

2. SMW0에서 엑셀 양식을 가져오는 방식 

여기서는 2번을 통해서 가져올 것이다. 1번이 궁금하시면.. 댓글 달아주세요 

 

# 우선 [ SWM0 ]에서 가져오기 위해서는 다음 로직을 설정해야 한다. ( 로직 설명은 넘어가겠다. )

*--------------------------------------------------------------------*
* SMW0
*--------------------------------------------------------------------*
DATA: LV_EXCEL_DATA   TYPE XSTRING,
      LT_MIME         TYPE TABLE OF W3MIME,
      LS_KEY          TYPE WWWDATATAB,
      LV_ERRORMESSAGE TYPE STRING,
      LV_FILESIZE     TYPE I,
      LV_FILESIZEC    TYPE C LENGTH 10.

*--------------------------------------------------------------------*
* Read file into binary string
*--------------------------------------------------------------------*

LS_KEY-RELID = 'MI'.
LS_KEY-OBJID = 'ZGJ_ABAP2XLSX_EXCEL' . " -> SAP 웹 저장소 변경 " 


CALL FUNCTION 'WWWDATA_IMPORT'
  EXPORTING
    KEY    = LS_KEY
  TABLES
    MIME   = LT_MIME
  EXCEPTIONS
    OTHERS = 1.

IF SY-SUBRC <> 0.
  LV_ERRORMESSAGE = 'A problem occured when reading the MIME object'(004).
  ZCX_EXCEL=>RAISE_TEXT( LV_ERRORMESSAGE ).
ENDIF.

CALL FUNCTION 'WWWPARAMS_READ'
  EXPORTING
    RELID = LS_KEY-RELID
    OBJID = LS_KEY-OBJID
    NAME  = 'filesize'
  IMPORTING
    VALUE = LV_FILESIZEC.

LV_FILESIZE = LV_FILESIZEC.

CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
  EXPORTING
    INPUT_LENGTH = LV_FILESIZE
  IMPORTING
    BUFFER       = LV_EXCEL_DATA
  TABLES
    BINARY_TAB   = LT_MIME
  EXCEPTIONS
    FAILED       = 1
    OTHERS       = 2.

 

# 02-1. 위에서 바이너리 형태엑셀을 읽어와서 다음 객체를 통해 [ LO_EXCEL ]로 파싱 해야 하기 때문에 다음 로직을 설정했다. 

DATA:
  LO_EXCEL  TYPE REF TO ZCL_EXCEL,
  LO_READER TYPE REF TO ZIF_EXCEL_READER.

CREATE OBJECT LO_READER TYPE ZCL_EXCEL_READER_2007.

  LO_EXCEL = LO_READER->LOAD( I_EXCEL2007 = LV_EXCEL_DATA ).

 

# 03. [ LO_EXCEL ]의 대한 객체를 만들었다면, 이제 [ Excel ]에 데이터를 넣어보자. 

 

 

# 05. [ EXCEL ] 다운로드 


# 01. 여기서는 [ GUI_DOWNLOAD ]을 통해서 앞에서 설정했던 엑셀다운로드해 보자. 

 

# 02. 그전에 GUI_DOWNLOAD의 [ 매개 변수 ]에 맞게 타입설정해 보자.

# 여기서 봐야 할 것은 [ FILENAME ]이다.

# 파일 경로Excel 명을 지정해줘야 하기 때문에 상황에 맞춰서 설정해 보자. 

 

# 파일 경로 알아보기 #

2023.07.10 - [.ABAP/..모든 것] - SAP 파일 선택 or 파일 경로 알아보기

 

SAP 파일 선택 or 파일 경로 알아보기

... 프로그램을 만들면서 Excel 업로드 or Excel 다운로드 등등 컴퓨터 파일에 저장을 하는 경우도 있을 테고, 컴퓨터 파일을 선택할 때가 있을 것이다. 거기서 필요한 것을 알아볼 것이다. 알아보기

potato98.tistory.com

 

 

# 그리고, 실행해 보면 다음과 같이 엑셀 다운로드성공적으로 된 걸 볼 수 있다. 

 

# 06. [ EXCEL ] 열기 설정 


# 만약, 현업이 저장한 엑셀띄어주세요. 요청이 온다면 다음 로직을 추가하면 된다.

 

 

# 06. [ EXCEL ] 스타일 설정 


# 이 부분은..... 시간이 된다면...ㅎ 

 

 

 

도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!

728x90

'.ABAP > ..Excel, EMail' 카테고리의 다른 글

SAP ABAP2XLSX ECC 버전 오류 해결  (0) 2025.08.26
SAP Excel 인쇄 영역 동적 설정  (0) 2025.07.24
SAP Email HTML 정리  (0) 2025.04.09
SAP Excel Marco 확인 방법  (1) 2025.01.15
SAP Excel 양식 다운로드( Web GUI 포함 )  (2) 2024.12.10