# 시작하기 전
# 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 ] 스타일 설정
# 이 부분은..... 시간이 된다면...ㅎ
'.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 |