SCARR 테이블을 사용해서 엑셀 출력해보기
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_EXCEL_SMPL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_KEY_OBJID
*&---------------------------------------------------------------------*
FORM download_excel_smpl USING p_ls_key_objid.
" Excel 객체 생성
CREATE OBJECT go_application 'Excel.Application'.
SET PROPERTY OF go_application 'Visible' = 1.
" 1. 새로운 엑셀 시트 만들기
CALL METHOD OF go_application 'Workbooks' = go_books.
CALL METHOD OF go_books 'Add'.
" 2. 시트 1개 자동 생성됨
CALL METHOD OF go_application 'Workbooks' = go_books.
CALL METHOD OF go_books 'Add'.
GET PROPERTY OF go_application 'ActiveWorkbook' = go_wbook.
" 3. 첫 번째 시트 선택하고 이름 변경
CALL METHOD OF go_application 'Worksheets' = go_sheet EXPORTING #1 = 1.
SET PROPERTY OF go_sheet 'Name' = 'SCARR Data'.
" 헤더 작성
PERFORM fill_cell_scarr USING go_application 01: 01 'MANDT',
02 'CARRID',
03 'CARRNAME',
04 'CURRCODE',
05 'URL'.
" SCARR 테이블에서 데이터 가져와서 엑셀에 입력
DATA: lv_tabix TYPE i,
gt_scarr TYPE TABLE OF scarr,
s_scarr TYPE scarr.
SELECT * FROM scarr INTO TABLE t_scarr. "데이터 조회
LOOP AT t_scarr INTO s_scarr.
lv_tabix = sy-tabix + 1. "헤더가 1행이므로 데이터는 2행부터 시작
PERFORM fill_cell_scarr USING go_application lv_tabix: 01 s_scarr-mandt,
02 s_scarr-carrid,
03 s_scarr-carrname,
04 s_scarr-currcode,
05 s_scarr-url.
ENDLOOP.
" 헤더 색상 설정
DATA: go_interior TYPE ole2_object, "색상을 설정할 객체
header_range TYPE ole2_object. "헤더 범위를 지정할 객체
"A1부터 E1까지(헤더 행) 선택
CALL METHOD OF go_sheet 'Range' = header_range
EXPORTING
#1 = 'A1' "시작 셀
#2 = 'E1'. "마지막 셀
"선택한 범위의 배경색을 노란색으로 설정
CALL METHOD OF header_range 'Interior' = go_interior.
SET PROPERTY OF go_interior 'Color' = 65535. " 노랑
" 테두리 설정
DATA: borders_range TYPE ole2_object,
cell_start TYPE ole2_object,
cell_end TYPE ole2_object,
range TYPE ole2_object,
single_border TYPE ole2_object.
" A1부터 E{마지막행}까지 전체 범위 선택
CALL METHOD OF go_sheet 'Cells' = cell_start EXPORTING #1 = 1 #2 = 1. "시작: A1
CALL METHOD OF go_sheet 'Cells' = cell_end EXPORTING #1 = lv_tabix #2 = 5. "끝: E{마지막행}
CALL METHOD OF go_sheet 'Range' = range EXPORTING #1 = cell_start #2 = cell_end. "범위
" 선택한 범위에 테두리 설정
CALL METHOD OF range 'Borders' = borders_range.
DO 4 TIMES. "위,아래,왼쪽,오른쪽 테두리
CALL METHOD OF borders_range 'Item' = single_border EXPORTING #1 = sy-index.
SET PROPERTY OF single_border 'LineStyle' = 1. "실선
SET PROPERTY OF single_border 'Weight' = 2. "두께
ENDDO.
" sy-index 값:
" 1 = 위쪽 테두리
" 2 = 왼쪽 테두리
" 3 = 아래쪽 테두리
" 4 = 오른쪽 테두리
" DO 4 TIMES 말고 이런 방법도 있다한다...
" CALL METHOD OF go_sheet 'Range' = range
" EXPORTING #1 = 'A1'
" #2 = |E{ lv_tabix }|.
CALL METHOD OF go_sheet 'Columns' = range.
" 칼럼 너비 자동맞춤
CALL METHOD OF range 'AutoFit'.
" 파일 저장
DATA: lv_file_path TYPE string VALUE 'C:\SCARR_Data.xlsx'.
CALL METHOD OF go_wbook 'SaveAs' EXPORTING #1 = lv_file_path.
" 엑셀 닫기
FREE OBJECT go_application.
ENDFORM.
*&---------------------------------------------------------------------*
*& 셀 데이터 작성 서브루틴
*&---------------------------------------------------------------------*
FORM fill_cell_scarr USING go_application TYPE ole2_object
pv_row TYPE i "몇 번째 줄
pv_col TYPE i "몇 번째 컬럼
pv_value TYPE ANY. " ANY를 사용하면 모든 타입 가능 (입력할 값)
DATA: cell TYPE ole2_object.
CALL METHOD OF go_application 'Cells' = cell EXPORTING #1 = pv_row #2 = pv_col.
SET PROPERTY OF cell 'Value' = pv_value.
ENDFORM.
ABAP
복사
•
LOOP말고 단순반복 Do 사용해서 진행
•
SCARR 테이블의 여러 다른 타입의 필드를 처리할려고 ANY를 사용 (효율적인건지?...잘모르겠네요)
공부 참고 블로그