DATA : LT_FILE TYPE FILETABLE,
LV_RC TYPE I,
LV_PATH TYPE STRING,
LT_FCAT TYPE TABLE OF LVC_S_FCAT,
LS_FCAT LIKE LINE OF LT_FCAT,
LT_EXCEL TYPE REF TO DATA,
LS_EXCEL TYPE REF TO DATA,
LV_ANSWER.
DATA : BEGIN OF LS_FIELDNM,
FIELD_NAME TYPE CHAR30,
END OF LS_FIELDNM.
DATA : LT_FIELDNM LIKE TABLE OF LS_FIELDNM.
FIELD-SYBOLS : <FT_EXCEL> TYPE TABLE,
<FS_LINE> TYPE ANY.
_MESSAGE_POP_UP TEXT-T28 LV_ANSWER. "해당 내용으로 다운로드 하시겠습니까?
IF LV_ANSWER NE GC_J.
MESSAGE S005 DISPLAY LIKE 'E'. "동작을 취소하였습니다.
EXIT.
ENDIF.
*->Display 되는 Field만 구성
LOOP AT GT_FIELDCAT INTO DATA(LS_FIELDCAT).
"신호등, 회사, 메세지는 빼고 나머지 필드로만 구성함
IF LS_FIELDCAT-FIELDNAME <> 'FLAG' AND
LS_FIELDCAT-FIELDNAME <> 'BUKRS' AND
LS_FIELDCAT-FIELDNAME <> 'MSG'.
LS_FCAT-FIELDNAME = LS_FIELDCAT-FIELDNAME.
LS_FCAT-COL_POS = LS_FIELDCAT-COL_POS.
LS_FCAT_COLTEXT = LS_FIELDCAT-SCRTEXT_M.
APPEND LS_FCAT TO LT_FCAT.
CLEAR : LS_FCAT.
ENDIF.
ENDLOOP.
SORT LT_FCAT BY COL_POS.
*->필드를 동적으로 구성
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = LT_FCAT
IMPORTING
EP_TABLE = LT_EXCEL
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1.
ASSIGN LT_EXCEL->* TO <FT_EXCEL>. "동적 테이블 연결
CREATE DATA LS_EXCEL LIKE LINE OF <FT_EXCEL>. "객체 생성
ASSIGN LS_EXCEL->* TO <FS_LINE>. "동적 스트럭쳐 연결
*->다운받을 경로 지정
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = ''
DEFAULT_EXTENSION = 'XLS'
INITIAL_DIRECTORY = 'C:\'
CHANGING
FILE_TABLE = LT_FILE
RC = LV_RC.
*->파일 이름 읽어옴
READ TABLE LT_FILE INTO DATA(LS_FILE) INDEX 1.
IF SY_SUBRC = 0.
LV_PATH = LS_FILE. "파일이 있으면 밑에서 타입을 맞춰주기 위해 다른 변수로 옮겨줌
ELSE.
MESSAGE S005 DISPLAY LIKE 'E'. "동작을 취소하였습니다.
EXIT.
ENDIF.
*->엑셀 다운로드 데이터 구성
LOOP AT GT_DATA INTO DATA(LS_DATA).
MOVE-CORRESPONDING LS_DATA TO <FS_LINE>.
APPEND <FS_LINE> TO <FT_EXCEL>.
ENDLOOP.
*->LT_FIELDNM으로 헤더옮김
PERFORM SET_FIELD_HEADER TABLES LT_FCAT
LT_FIELDNM.
FORM SET_FIELD_HEADER TABLES PT_FCAT STRUCTURE LVC_S_FCAT
PT_FIELDNM TYPE STANDARD TABLE.
LOOP AT PT_FCAT INTO DATA(LS_FCAT).
PT_FIELDNM = LS_FCAT-COLTEXT.
APPEND PT_FIELDNM.
CLEAR PT_FIELDNM.
ENDLOOP.
ENDFORM.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
FILENAME = LV_PATH "파일 이름
FILETYPE = 'ASC' "DBF로 했을 경우 헤더가 10자리로 제한 됨
WRITE_FIELD_SEPARATOR = GC_X
FIELDNAMES = LT_FIELDNM "구성한 헤드
CHANGING
DATA_TAB = <FT_EXCEL> "구성한 데이터
EXCEPTIONS
UNKNOWN_ERROR = 1.
반응형
'ABAP' 카테고리의 다른 글
[ABAP] 간단하게 ALV SPLIT 생성하기 (0) | 2023.03.30 |
---|---|
[ABAP] 클래스로 간단하게 ALV 생성하기 (0) | 2023.03.29 |
[ABAP] Top-of-Page 예제 (0) | 2023.03.24 |
[ABAP] 핸드폰 번호 오류검증(FIND REGEX 구문) (0) | 2023.03.09 |
[ABAP] 이메일 유효성 체크 (0) | 2023.03.09 |