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

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한 시트의 탭 페이지 이름을 설정

템플릿 파일 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가 다운로드가 되는 문제가 발생헀다.


배율을 조절, 가로로 출력하거나 페이지 맞춤을 설정하여 문제를 해결할 수 있다.
+ 금액과 통화 연결하여 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에 셀 구분자인 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~VBELN, A~KUNNR, A~BSTNK, A~NETWR, A~VDATU, A~WAERK,
B~NAME1 AS KUNNRTXT,
C~ZTERM,
D~INCO1,
E~BUTXT,
F~TEL_NUMBER, F~CITY1 && ' ' && F~STREET AS ADDRESS
FROM VBAK AS A
INNER JOIN KNA1 AS B ON B~KUNNR = A~KUNNR
INNER JOIN VBKD AS C ON C~VBELN = A~VBELN
INNER JOIN VBKD AS D ON D~VBELN = A~VBELN AND D~POSNR IS INITIAL
INNER JOIN T001 AS E ON E~BUKRS = @S_BUKRS-LOW
INNER JOIN ADRC AS F ON F~ADDRNUMBER = E~ADRNR
WHERE A~VBELN IN @S_VBELN
INTO CORRESPONDING FIELDS OF @LS_HEADER.
SELECT A~POSNR, A~MATNR, A~NETPR, A~WAERK, A~KWMENG, A~MEINS, A~NETPR * A~KWMENG AS AMOUNT,
B~MAKTX,
C~LGOBE
FROM VBAP AS A
INNER JOIN MAKT AS B ON B~MATNR = A~MATNR AND B~SPRAS = @SY-LANGU
INNER JOIN T001L AS C 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
5 5 0 LS_HEADER-BUTXT
CHANGING
LO_WORKSHEET.
PERFORM SET_VALUE_TO_CELL " 회사 주소
USING
6 5 0 LS_HEADER-ADDRESS
CHANGING
LO_WORKSHEET.
DATA(LV_TEL_CELL) = |Tel : { LS_HEADER-TEL_NUMBER } |.
PERFORM SET_VALUE_TO_CELL " 회사 전화번호
USING
7 5 0 LV_TEL_CELL
CHANGING
LO_WORKSHEET.
DATA(LV_VBELN_CELL) = |'{ LS_HEADER-VBELN ALPHA = OUT }|. " 앞의 0 제거
PERFORM SET_VALUE_TO_CELL " 판매오더 번호
USING
10 3 0 LV_VBELN_CELL
CHANGING
LO_WORKSHEET.
DATA : LV_KUNNR_CELL TYPE C 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 3 0 LV_KUNNR_CELL
CHANGING
LO_WORKSHEET.
PERFORM SET_VALUE_TO_CELL " 참조번호
USING
12 3 0 LS_HEADER-BSTNK
CHANGING
LO_WORKSHEET.
PERFORM SET_VALUE_TO_CELL " 출력일
USING
13 3 0 SY-DATUM
CHANGING
LO_WORKSHEET.
* 총액
DATA: LV_NETWR_COMMA TYPE C 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 6 0 LV_NETWR_CELL
CHANGING
LO_WORKSHEET.
PERFORM SET_VALUE_TO_CELL " 배송 요청일
USING
11 6 0 SY-DATUM
CHANGING
LO_WORKSHEET.
PERFORM SET_VALUE_TO_CELL " 지급조건
USING
12 6 0 LS_HEADER-ZTERM
CHANGING
LO_WORKSHEET.
PERFORM SET_VALUE_TO_CELL " 인도조건
USING
13 6 0 LS_HEADER-INCO1
CHANGING
LO_WORKSHEET.
* Sales Order Items
* 템플릿의 ROW 개수보다 많거나 같다면 빈 ROW 1개 있도록 늘리기
DATA : LV_ITEM_COUNT TYPE I.
LV_ITEM_COUNT = LINES( LT_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 C LENGTH 1500.
DATA : LT_EXCEL_ITEM TYPE TABLE OF TY_CHAR,
LS_EXCEL_ITEM LIKE LINE OF LT_EXCEL_ITEM,
DELI TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
LV_NETPR_COMMA TYPE C LENGTH 30,
LV_KWMENG TYPE C LENGTH 30,
LV_AMOUNT_COMMA TYPE C 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.
DATA: LV_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_BEFORE( VAL = LV_FILENAME SUB = '.' ).
CONCATENATE LV_PATH LV_PURE_NAME INTO LV_PDF_FULL_PATH.
CALL METHOD OF LO_WORKBOOK 'ExportAsfixedFormat'
EXPORTING
#1 = 0 " 파일 형식 PDF
#2 = LV_PDF_FULL_PATH. " 저장 경로 + 파일명
ENDFORM.
'SAP > ABAP' 카테고리의 다른 글
| [ABAP] ALV Cell Edit과 BAPI_PO_CHANGE (13) | 2025.08.28 |
|---|---|
| SELECTION SCREEN에서 ToolBar 버튼 추가 및 삭제 (1) | 2025.08.14 |
| CALL TRANSACTION 'XK03' PARAMETER ID (2) | 2025.08.10 |
| F4IF_INT_TABLE_VALUE_REQUEST VALUE_ORG = 'C' (5) | 2025.08.09 |
| [ABAP] 메시지 타입 W, E 사용시 입력 필드 안잠구는 방법 (5) | 2025.06.22 |