쌓고 쌓다

SMW0 엑셀 템플릿을 이용한 Excel(OLE), PDF 다운로드 본문

SAP/ABAP

SMW0 엑셀 템플릿을 이용한 Excel(OLE), PDF 다운로드

승민아 2025. 8. 13. 08:46
반응형

목표

SMW0에 위와 같은 Excel 템플릿을 업로드하고

 

이 템플릿에 값들을 넣어 엑셀 파일도 만들고

 

이 엑셀 파일을 PDF로 다운로드 받을 수 있게 하자.

 

템플릿 파일 SMW0 업로드

두번째 라디오 버튼을 누르고 Contents 아이콘을 누른다.

 

템플릿을 업로드할 패키지를 입력한다.

그리고 Excute

 

왼쪽 New 아이콘을 통해서 엑셀 템플릿을 등록한다.

 

개체 이름(Object Name)은 추후에 템플릿을 찾는 키 값으로 사용된다.

 

IMPORT 기능으로 업로드한 템플릿 파일을 덮어쓸 수 도 있다.

 

 

 

이제 OLE(Object Linking Embedded) 방법으로

엑셀 템플릿에 값을 넣고

엑셀 파일을 다운로드, PDF 다운로드 기능을 구현해보자.

 

방식은 다음과 같이 진행된다.

Excel 템플릿 다운로드 -> 템플릿 파일 Open -> 값 채우기 -> SAVE -> (PDF 다운로드)

 

1. 템플릿 파일 Download

1.1 저장 경로 획득 : 사용자가 저장할 위치를 입력

'FILE_SAVAE_DIALOG' 메소드를 이용해서 사용자가 파일을 저장할 위치를 설정하는 팝업을 띄울 수 있다.

LV_FILE_FILTER : 설명 | 패턴 | 설명 | 패턴 형식으로

저장시 파일 형식을 선택하는 드롭다운에 표시된다.

LV_PATH : 저장 경로 ( 예. C: )

LV_PATH : 저장 경로 + 파일명 ( 예. C:/test.xmls )

 

IF LV_FULLPATH IS INITIAL : 팝업 창에서 경로를 저장하지 않고 취소를 눌렀을 경우에

LV_FULLPATH에는 값이 들어가지 않는다. 이런 상황을 처리해주자.

 

FILE_FILTER에 넣은 결과이다.

 

 

1.2 SMW0(SAP 웹 저장소)에 업로드한 템플릿 가져오기 및 다운로드

LV_FULLPATH에 파일명을 포함한 모든 경로가 들어가 있다.

이 값을 LV_FILE에 할당하고 쓰자.

LV_FILE 위치로 템플릿 파일을 저장할 것 이다.

 

템플릿 파일은 WWWDATA 테이블에 존재한다.

OBJID에 이전에 업로드한 템플릿의 Object Name을 넣어주면 된다.

 

찾은 템플릿 파일을 'DOWNLOAD_WEB_OBJECT' 펑션을 통해

LV_FILE 위치에 다운로드할 수 있다.

 

2. 템플릿 파일 Open

엑셀 파일을 다루는 동작들은 OLE2_OBJECT 타입을 통해 이뤄진다.

'VISIBLE' = 1 : 켜진 엑셀 파일에 내가 입력한 작업들이 반영되는 모습이 실시간으로 보인다.

'Name' = 'Slaes Order' : 현재 Active한 시트의 탭 페이지 이름을 설정

 

https://community.sap.com/t5/application-development-and-automation-blog-posts/using-ole2-objects-to-create-an-excel-file/ba-p/13208688

 

템플릿 파일 OPEN 코드는 이 사진을 보면 이해가 간다.

엑셀 애플리케이션을 만들어 받고

WorkBooks를 받고

WorkBooks에서 WorkBook을 받고

WorkBook의 WorkSheet를 받고한다.

 

받은 OLE2_OBJECT를 통해서 엑셀에 작업이 가능하다.

사진상에서 Moja1이 Active된 시트이고 그 외 Moja2 Moja3는 비활성화된 시트인 모습니다.

 

3. 값 채우기

'SET_VALUE_TO_CELL' 이라는 서브루틴을 통해서 엑셀에 값을 넣게 했다.

파라미터로 ROW(행) COLUMN(열) BOLD(굵게) VALUE(값)을 넘긴다.

이때 작업을할 워크시트인 LO_WORKSHEET도 넘겨준다.

 

ALPHA = OUT : 판매오더가 '0001234' 형식이라 앞의 0을 제거하는 문법이다.

 

'SET_VALUE_TO_CELL' 서브루틴은 다음과 같다.

서브루틴으로 행과 열, 굵기, 값처럼 필수적인 값을 가지고

엑셀 셀에 값을 넣는 서브루틴이다.

 

엑셀 셀 값에 숫자 넣을때 앞에 ' 의미

예시 엑셀에 '60000029 이렇게 값이 들어가있는 경우가 있는데
' 의미는 뒤에 숫자값을 숫자로볼것인가 텍스트로 볼 것인가이다.
그래서 ' 붙여서 넣었더니 텍스트로 인식하고 왼쪽에 붙는거인듯.

 

숫자를 텍스트로 표시하여 왼쪽에 붙이고싶을때 '를 같이 넣어주자.

 

 

 

+ Excel 파일을 가로로 PDF 다운로드(출력)

엑셀 내용이 가로로 길어서

PDF로 다운로드시 한 페이지에 모든 내용을 못 담아서

두 페이지로 나눠져서 PDF가 다운로드가 되는 문제가 발생헀다.

 

가로 세로

 

배율 : ABAP_FALSE 또는 10 20 ... 100 값을 넣음 10%임.

 

 

 

배율을 조절, 가로로 출력하거나 페이지 맞춤을 설정하여 문제를 해결할 수 있다.

 

 

+ 금액과 통화 연결하여 Excel, PDF 다운로드 (천단위 쉼표)

ALV에서 금액을 출력할때는 필드 카탈로그에서 REF_TABLE 또는 CFIELDNAME로 통화를 연결하여 출력할 수 있었다.

현재는 엑셀에 값을 넣어주는 상황이다보니 이런 방법은 사용할 수 없기에

WRITE 구문에서 통화를 연결하여 문자열로 반환하고 CURRENCY 키워드도 함께 사용하여

천단위 쉼표(,)와 원 단위 연결시 이뤄지는 * 100의 결과를 한번에 받을 수 있다.

 

CONDENSE 키워드로 공백을 제거해주는 작업을 해주자.

해주지 않는다면 위 사진처럼 금액 앞에 C 타입의 남은 자릿수만큼 공백이 들어가 있는 결과가 나온다.

 

잘 연결되어 나온다~

 

혹시 몰라 해본 USD 통화도 잘 나오더라

 

+ 특정 위치에 행 삽입

템플릿에 아이템들을 채워주는데

만약 템플릿의 양식보다 아이템이 많다면 아이템 부분의 행을 복사 삽입하여 더 늘려줄 필요가 있다.

이 과정은 'Rows' = LO_ROWS로 OLE2_OBJECT를 받고

이 행을 선택 'Select'하여 그 위치에 행을 복사 삽입하는 'Insert'를 해주면 된다.

 

위의 코드는 18행에 우클릭하여 행을 삽입하는 코드이다.

 

LIKE 위의 사진처럼. INSERT.!

 

 

다음은 템플릿에 아이템들의 값을 넣는 부분이다.

아래의 방식은 Internal Table에 값들을 넣어놓고

이 값을 엑셀 클립보드에 복사하여

원하는 위치에 값을 붙여넣어 엑셀에 값을 넣는 방식이다.

 

Internal Table에 값 넣기

Internal Table에 셀 구분자인 CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB 값 ' # '를 통해서

엑셀에 붙여넣기할때 A # B라는 값을 넣으면

첫번째 셀에는 A값 다음 오른쪽의 셀에는 B라는 값이 들어가도록 할 수 있다.

각 행의 값들은 C 타입으로 하나의 String 형태로 Internal Table에 값을 넣어주면 된다.

 

조금 더 보강하자면 Internal Table에 2개의 값이 들어 있다.

1. A # B # C

2. D # E # F

라면

 

클립보드에 값을 넣고 붙여넣기하면

첫번째 ROW의 1 2 3번째 COLUMN 각각에 A B C 값이 들어가고

두번째 ROW의 1 2 3번째 COLUMN 각각에 D E F 값이 들어간다.

 

클립보드에 값 넣기

'CL_GUI_FRONTEND_SERVICE' 클래스의 'CLIPBOARD_EXPORT' 메소드를 통해서

Internal Table에 넣어둔 값들을 클립보드에 넣어줄 수 있다.

 

그리고

 

'Cells' = LO_CELL를 통해서 워크시트의 특정 셀 OLE2_OBJECT를 받아

'Select' 선택 상태로 두고

'Paste' 붙여넣기하여

클립보드의 값들을 넣어줄 수 있다.

 

그럼 엑셀에서 특정 셀 위치에서 붙여넣기한 상황과 동일하게

값들이 들어간다.

 

4. SAVE

저장은 CALL METHOD OF (워크북 OLE2_OBJECT) 'SAVE'를 통해서

엑셀에서 Ctrl + S를 눌러 저장하는것과 동일한 동작을 할 수 있다.

 

가로로 출력 설정하는 부분에서

'PageSetup'을 통해 페이지 설정 OLE2_OBJECT를 가져와

세로 또는 가로 출력을 설정할 수 있고

'Zoom' 배율도 가능하다.

 

5. Excel을 PDF로 다운로드

현재 LV_FILENAME에는 엑셀 확장자까지 포함된 'abc.xmls' 문자열이 들어가 있기에

문자 '.' 점 이전의 문자열들만 추출하는 SUBSTRING_BEFORE을 통해서 파일명만 추출하여

LV_PURE_NAME에 담았다.

 

LV_PURE_NAME과 저장 경로인 LV_PATH를 합쳐 이 위치에 PDF 파일을 다운로드한다.

엑셀을 PDF로 다운받을때

LO_WORKBOOK 오브젝트의 'ExportAsfixedFormat' 메소드를 사용하면 된다.

 

+ 엑셀 내용이 세로로 너무 길어 페이지 맞춤으로 PDF를 다운로드 받고싶다면

배율을 꺼버리면 페이지 맞춤으로 내보내기가 동작하기에

ABAP_FALSE 값을줘서 비활성화하면 된다.

 

 

참고로

OLE2_OBJECT로 엑셀 다운로드를 다룰때

최종 'SAVE'전까지 덤프나 에러가 떠도

프로그램은 덤프가 발생하지 않고 잘 돌아간다.

 

하지만 엑셀을 다룰때 덤프나 에러가 뜬다면 정상적으로 저장이 되어 있지 않을 것 이다.

엑셀 찾을 닫을때 '저장하시겠습니까?' 메세지가 뜬다면 중간에 덤프가 발생해서 'SAVE'까지 가지 못한것이다.

 

 

엑셀 PROPERTY 속성

엑셀의 'SAVE', 'Zoom', 'PageSetup' 등 속성들은

직접 엑셀의 매크로 기능을 통해서 어떤 속성들을 다루는지 확인할 수 있다.

 

엑셀의 동작들도 스크립트로 동작하기에 이 스크립트를 확인해볼 수 있는것이다.

 

매크로 기록하고 매크로 보기를 눌러

 

기록한 매크로를 선택하고 편집을 눌러

 

Select, Save 등 PROPERTY를 확인하고 동작들을 다룰 수 있다.

 

 

셀안의 값이 길어 잘림현상 발생

셀 안의 값이 너무 길어 ###으로 표시되거나

PDF 다운로드시 잘림현상이 발생할 수 있다.

 

컬럼의 테두리를 더블클릭하여

값에 맞춰 열 너비를 최적화할 수 있다.

최적화되어 딱 맞춰진 모습이다.

 

최적화하는 동작을 매크로로 녹화해

스크립트를 본 모습이다.

 

셀 안의 값에 맞춰 컬럼 너비를 최적화해보자.

 

 

 

PDF 다운로드시 세로, 가운대 맞춤 위치 설정법

 

 

 

페이지 맞춰서 내용을 너비, 높이 꽉 채우기(페이지 맞춤)

위의 사진처럼 PDF 다운로드시 왼쪽 또는 오른쪽에 공백이 일정하기 존재하지 않는다.

내용이 한쪽에 치우쳐져 있다.

 

위처럼 'ExcuteExcel4Macro'에 'PAGE.SETUP(,,,,,,,,,,,,{1,1})' 값을 넣어 내용을 좌우에 맞춰 꽉 채워

페이지 맞춤할 수 있다.

 

, , , { } 이게

 

 

엑셀 매크로 스크립트 기록을 까봤을때 이 프로퍼티들중 , , , 로 건너뛰며

FitToPagesWide와 FitToPagesTall 위치에 1 0 값을 넣어주는 구문 같은데

가로로 꽉 채우는 첫번째 값 FitToPagesWIde에 1을 넣어 활성화는 되지만

세로로 채우는 FitToPagesTall에 1을 넣으면 동작은 안되더라..

 

내용에 맞춰 페이지를 꽉 채워진다.

 

 

 

전체코드

더보기

FORM SO_EXCEL_DOWNLOAD .

* 입력된 조건으로 SELECT
  DATA LS_HEADER TYPE TY_HEADER,
         LT_ITEM   TYPE TABLE OF TY_ITEM.

  SELECT SINGLE A~VBELNA~KUNNRA~BSTNKA~NETWRA~VDATUA~WAERK,
                B~NAME1 AS KUNNRTXT,
                C~ZTERM,
                D~INCO1,
                E~BUTXT,
                F~TEL_NUMBERF~CITY1 && ' ' && F~STREET AS ADDRESS
    FROM VBAK AS A
    INNER JOIN KNA1 AS ON B~KUNNR A~KUNNR
    INNER JOIN VBKD AS ON C~VBELN A~VBELN
    INNER JOIN VBKD AS ON D~VBELN A~VBELN AND D~POSNR IS INITIAL
    INNER JOIN T001 AS ON E~BUKRS @S_BUKRS-LOW
    INNER JOIN ADRC AS ON F~ADDRNUMBER E~ADRNR
    WHERE A~VBELN IN @S_VBELN
    INTO CORRESPONDING FIELDS OF @LS_HEADER.

  SELECT A~POSNRA~MATNRA~NETPRA~WAERKA~KWMENGA~MEINSA~NETPR * A~KWMENG AS AMOUNT,
         B~MAKTX,
         C~LGOBE
    FROM VBAP AS A
    INNER JOIN MAKT AS ON B~MATNR A~MATNR AND B~SPRAS @SY-LANGU
    INNER JOIN T001L AS ON C~LGORT A~LGORT AND C~WERKS A~WERKS
    WHERE A~VBELN IN @S_VBELN
    ORDER BY POSNR
    INTO CORRESPONDING FIELDS OF TABLE @LT_ITEM.

* 1. 파일 저장 위치, 이름 설정
  DATA LV_FILE_FILTER       TYPE STRING VALUE 'Excel File(*.xlsx; *.xls)|*.xlsx; *.xls'" 저장시 파일형식 설명
         LV_FILENAME          TYPE STRING VALUE 'Template'" 파일명
         LV_INITIAL_DIRECTORY TYPE STRING VALUE 'C:'" 기본 위치

  DATA LV_PATH     TYPE STRING" 저장시 경로
         LV_FULLPATH TYPE STRING" 저장시 경로 + 파일명.확장자

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
      DEFAULT_EXTENSION         'xlsx'
      DEFAULT_FILE_NAME         LV_FILENAME
      FILE_FILTER               LV_FILE_FILTER
      INITIAL_DIRECTORY         LV_INITIAL_DIRECTORY
    CHANGING
      FILENAME                  LV_FILENAME
      PATH                      LV_PATH
      FULLPATH                  LV_FULLPATH
    EXCEPTIONS
      CNTL_ERROR                1
      ERROR_NO_GUI              2
      NOT_SUPPORTED_BY_GUI      3
      INVALID_DEFAULT_FILE_NAME 4
      OTHERS                    5.
  IF SY-SUBRC <> 0.
*   Implement suitable error handling here
  ENDIF.

  IF LV_FULLPATH IS INITIAL.
    RETURN.
  ENDIF.

* 2. SMW0(SAP 웹 저장소)에 업로드한 템플릿 가져오기 및 다운로드
  DATA LS_ITEM TYPE WWWDATATAB" 템플릿
         LV_FILE TYPE RLGRAP-FILENAME" 템플릿 저장할 위치

  LV_FILE LV_FULLPATH.

  SELECT SINGLE *
    FROM WWWDATA
    WHERE OBJID 'Z_SO_EXCEL_TEMPLATE'
    INTO CORRESPONDING FIELDS OF @LS_ITEM.


  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         LS_ITEM
      DESTINATION LV_FILE.

  IF SY-SUBRC <> 0.
  ENDIF.

* 3. 템플릿 열기
  DATA LO_APPLICATION TYPE OLE2_OBJECT,
         LO_WORKBOOKS   TYPE OLE2_OBJECT,
         LO_WORKBOOK    TYPE OLE2_OBJECT,
         LO_WORKSHEET   TYPE OLE2_OBJECT,
         LO_CELL        TYPE OLE2_OBJECT,
         LO_ROWS        TYPE OLE2_OBJECT,
         LO_COLUMNS     TYPE OLE2_OBJECT.

  CREATE OBJECT LO_APPLICATION 'EXCEL.APPLICATION'.
  SET PROPERTY OF LO_APPLICATION 'VISIBLE' 1" 엑셀 화면에 값을 쓰는것을 보일것인지? 엑셀을 보일것인지

  CALL METHOD OF LO_APPLICATION 'WORKBOOKS' LO_WORKBOOKS.

  CALL METHOD OF LO_WORKBOOKS 'OPEN' LO_WORKBOOK
    EXPORTING
      #1 LV_FILE.

  GET PROPERTY OF LO_APPLICATION 'ACTIVESHEET' LO_WORKSHEET.
  SET PROPERTY OF LO_WORKSHEET 'Name' 'Sales Order'" 탭 페이지 이름 변경

* 4. 값 넣어주기

* Sales Order Header
  PERFORM SET_VALUE_TO_CELL " 사명
    USING
      LS_HEADER-BUTXT
    CHANGING
      LO_WORKSHEET.

  PERFORM SET_VALUE_TO_CELL " 회사 주소
    USING
      LS_HEADER-ADDRESS
    CHANGING
      LO_WORKSHEET.

  DATA(LV_TEL_CELL|Tel { LS_HEADER-TEL_NUMBER } |.
  PERFORM SET_VALUE_TO_CELL " 회사 전화번호
    USING
      LV_TEL_CELL
    CHANGING
      LO_WORKSHEET.

  DATA(LV_VBELN_CELL|'{ LS_HEADER-VBELN ALPHA OUT }|" 앞의 0 제거
  PERFORM SET_VALUE_TO_CELL " 판매오더 번호
    USING
      10 LV_VBELN_CELL
    CHANGING
      LO_WORKSHEET.

  DATA LV_KUNNR_CELL TYPE LENGTH 255.
  " STRING(10)으로하면 5자리만 채워져있어도 빈자리는 공백으로 채워짐. 그래서 ABCDE     ( 텍스트 )처럼 사이에 공백이 발생함.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT  LS_HEADER-KUNNR
    IMPORTING
      OUTPUT LV_KUNNR_CELL.
  LV_KUNNR_CELL |{ LV_KUNNR_CELL }{ LS_HEADER-KUNNRTXT } )|.

  PERFORM SET_VALUE_TO_CELL " 바이어
    USING
      11 LV_KUNNR_CELL
    CHANGING
      LO_WORKSHEET.

  PERFORM SET_VALUE_TO_CELL " 참조번호
    USING
      12 LS_HEADER-BSTNK
    CHANGING
      LO_WORKSHEET.

  PERFORM SET_VALUE_TO_CELL " 출력일
    USING
      13 SY-DATUM
    CHANGING
      LO_WORKSHEET.

* 총액
  DATALV_NETWR_COMMA TYPE LENGTH 30,
        LV_NETWR_CELL  TYPE STRING.

  WRITE LS_HEADER-NETWR TO LV_NETWR_COMMA CURRENCY LS_HEADER-WAERK.
  CONDENSE LV_NETWR_COMMA" WRITE 구문 사용시 LV_NETWR_COMMA가 C 타입 LENGTH 30이라서 왼쪽에 빈자리만큼 스페이스바가 들어가기에 제거해줘야함.
  CONCATENATE LV_NETWR_COMMA LS_HEADER-WAERK INTO LV_NETWR_CELL SEPARATED BY SPACE.

  PERFORM SET_VALUE_TO_CELL " 총액
    USING
      10 LV_NETWR_CELL
    CHANGING
      LO_WORKSHEET.

  PERFORM SET_VALUE_TO_CELL " 배송 요청일
    USING
      11 SY-DATUM
    CHANGING
      LO_WORKSHEET.

  PERFORM SET_VALUE_TO_CELL " 지급조건
    USING
      12 LS_HEADER-ZTERM
    CHANGING
      LO_WORKSHEET.

  PERFORM SET_VALUE_TO_CELL " 인도조건
    USING
      13 LS_HEADER-INCO1
    CHANGING
      LO_WORKSHEET.

* Sales Order Items

* 템플릿의 ROW 개수보다 많거나 같다면 빈 ROW 1개 있도록 늘리기
  DATA LV_ITEM_COUNT TYPE I.
  LV_ITEM_COUNT LINESLT_ITEM ).
  IF LV_ITEM_COUNT > 11.

    CALL METHOD OF LO_APPLICATION 'Rows' LO_ROWS
      EXPORTING
        #1 18" 복수 선택 가능 1:4
    CALL METHOD OF LO_ROWS 'Select'" Row 선택

    DO LV_ITEM_COUNT 11 TIMES.
      CALL METHOD OF LO_ROWS 'Insert'" Row 삽입
    ENDDO.

  ENDIF.

  TYPES TY_CHAR TYPE LENGTH 1500.
  DATA LT_EXCEL_ITEM   TYPE TABLE OF TY_CHAR,
         LS_EXCEL_ITEM   LIKE LINE OF LT_EXCEL_ITEM,
         DELI            TYPE VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
         LV_NETPR_COMMA  TYPE LENGTH 30,
         LV_KWMENG       TYPE LENGTH 30,
         LV_AMOUNT_COMMA TYPE LENGTH 30.

  LOOP AT LT_ITEM ASSIGNING FIELD-SYMBOL(<FS_ITEM>).
    LV_KWMENG CONV STRING<FS_ITEM>-KWMENG ).
    WRITE <FS_ITEM>-NETPR TO LV_NETPR_COMMA CURRENCY <FS_ITEM>-WAERK.
    WRITE <FS_ITEM>-AMOUNT TO LV_AMOUNT_COMMA CURRENCY <FS_ITEM>-WAERK.

    LS_EXCEL_ITEM | { <FS_ITEM>-POSNR } { DELI } { <FS_ITEM>-MATNR } { DELI } { <FS_ITEM>-MAKTX } { DELI } { LV_NETPR_COMMA } { DELI } { <FS_ITEM>-WAERK } { DELI } { LV_KWMENG } { DELI } { <FS_ITEM>-MEINS } { DELI } { LV_AMOUNT_COMMA } { DELI } {
<FS_ITEM>-LGOBE }|.

    APPEND LS_EXCEL_ITEM TO LT_EXCEL_ITEM.
  ENDLOOP.

  DATALV_RC TYPE I.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
    EXPORTING
      NO_AUTH_CHECK        SPACE
    IMPORTING
      DATA                 LT_EXCEL_ITEM
    CHANGING
      RC                   LV_RC
    EXCEPTIONS
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      NOT_SUPPORTED_BY_GUI 3
      NO_AUTHORITY         4
      OTHERS               5.
  IF SY-SUBRC <> 0.
*   Implement suitable error handling here
  ENDIF.

  CALL METHOD OF LO_WORKSHEET 'Cells' LO_CELL
    EXPORTING
      #1 16 " ROW
      #2 2" COLUMN

  CALL METHOD OF LO_CELL 'Select'.
  CALL METHOD OF LO_WORKSHEET 'Paste'.

* 가로로 출력 설정 1 : 참, 2 : 거짓
  DATA LO_PAGESETUP TYPE OLE2_OBJECT.
  GET PROPERTY OF LO_WORKSHEET 'PageSetup' LO_PAGESETUP.
  SET PROPERTY OF LO_PAGESETUP 'Orientation' 2" 1 : 세로, 2 : 가로

  SET PROPERTY OF LO_PAGESETUP 'Zoom' ABAP_FALSE.

  CALL METHOD OF LO_WORKSHEET 'Columns' LO_COLUMNS.
  CALL METHOD OF LO_COLUMNS 'AutoFit'.


* WORKBOOK 최종 저장
  CALL METHOD OF LO_WORKBOOK 'Save'.

  IF SY-SUBRC <> 0.
  ENDIF.

* Excel을 PDF로 내보내기
* LV_FILENAME에 abc.xlsx있는데 .xlsx 빼는 과정 필요
  DATA LV_PURE_NAME     TYPE STRING,
         LV_PDF_FULL_PATH TYPE STRING.
  LV_PURE_NAME SUBSTRING_BEFOREVAL LV_FILENAME SUB '.).
  CONCATENATE LV_PATH LV_PURE_NAME INTO LV_PDF_FULL_PATH.

  CALL METHOD OF LO_WORKBOOK 'ExportAsfixedFormat'
    EXPORTING
      #1 " 파일 형식 PDF
      #2 LV_PDF_FULL_PATH" 저장 경로 + 파일명

ENDFORM.

 

 

 

반응형