Search
✏️

10-1 ABAP 엑셀

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를 사용 (효율적인건지?...잘모르겠네요)
공부 참고 블로그