안녕하세요
인터널테이블의 데이터를 OPEN DATASET 구문을 이용해서 백그라운드로 엑셀파일(.xls) 생성을 하고자합니다.
기존에 CSV 확장자, TXT 확장자 파일은 생성해본 경험이 있는데,
XLS 확장자 파일을 백그라운드로 생성하고자 하는데 생성은 되는데 원하는 '엑셀'의 형태로 만들어져 있지 않아 되지 않아 문의드립니다.
1) 생성은 SAP 서버내에 함 -> 파일이름.xls 로 생성 자체는 됩니다.
2) 생성된 파일을 열어보면 셀별로 칸칸이 데이터가 들어있지 않고
한 셀에 한줄 데이터가 다 들어갑니다(이게문제)
(이미지상 위 경우처럼 A~D 열에 나눠져 들어가길 원하고, 아래가 문제되는 현재 상태입니다.)
현재 소스는 대략적으로 아래와 같습니다..
TEXT MODE -> BINARY MODE,
ENCODING 이것저것.. 시도해보는중인데 해결이 되지 않습니다.
OPEN DATASET이 아닌 다른 방법이어도 상관없으니, 혹시 방법이 있다면 부탁드립니다 ! 감사합니다.
OPEN DATASET LV_FILE FOR OUTPUT IN TEXT MODE ENCODING NON-UNICODE
IGNORING CONVERSION ERRORS.
IF SY-SUBRC NE 0.
MESSAGE S000 WITH '파일 생성중 오류발생'. "type 'S'.
EXIT.
ENDIF.
"-GT_EXCEL 이 데이터가 있는 인터널 테이블입니다.
LOOP AT GT_EXCEL.
TRANSFER GT_EXCEL TO LV_FILE .
ENDLOOP.
CLOSE DATASET LV_FILE.
댓글 4
-
Hwable
2024.07.25 02:49
-
아좀더
2024.07.25 20:35
답변 감사합니다!
선생님 덕분에 해결했습니다 !우선 말씀해주신대로 하면 엑셀데이터가 아래 형태로 들어갑니다
탭에대한 아이디어를 주셔서 몇가지 시도해보니,1) 탭을 마지막에 넣는다
TRANSFER GT_EXCEL-FIELD_A TO LV_FILE.TRANSFER GT_EXCEL-FIELD_B TO LV_FILE.
TRANSFER GT_EXCEL-FIELD_C TO LV_FILE.
TRANSFER CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB TO LV_FILE.
최종적으로 해결한 방법은
CONCATENATE를 이용해서 필드a+탭+필드b+탭+필드c+탭...+필드n INTO LV_TEXT
이 LV_TEXT를
TARNSFER LV_TEXT TO LV_FILE.로 넣어서 성공했습니다.
좋은 아이디어 감사드립니다 !
(다만 저건 컬럼이 너~무많아지는 경우 LV_TEXT의 최대길이를 초과하면 쓸 수 없을것 같습니다.) -
Hwable
2024.07.26 01:57
안녕하세요.
해결됐다니 다행입니다.
그리고 최종방법이 제가 말씀드린 방법이었습니다.
셀간에 탭을 넣으시라는 말씀이었지요.
제가 길어져서 더 쓰진 않았는데 NO END OF LINE 쓰시면, 처음 알려드린 방식도 됩니다.
기본적으로는 TRANSFER 명령어마다 EOL이 붙기 때문에 한 줄씩 내려가기 때문이죠.
------------------------------------------------------------------------------------------
TRANSFER GT_EXCEL-FIELD_A TO LV_FILE NO END OF LINE.
TRANSFER CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB TO LV_FILE NO END OF LINE.
... 반복
* 마지막 행
TRANSFER GT_EXCEL-FIELD_Z TO LV_FILE. "마지막 행은 EOL 바인딩
------------------------------------------------------------------------------------------
그리고 CONCATENATE를 사용하신다면, LV_TEXT는 String 으로 선언하면 길이 걱정은 하지 않으셔도 됩니다.
좋은 하루 되세요.
-
Hwable
2024.07.25 03:06
그리고, 개인적으로는 인터널 테이블을 MHTML 방식으로 Export 하는 방식이 있는데, (인터넷 참조)
최종 데이터가 엑셀형식의 XML String 으로 생성됩니다.
그 데이터를 DATASET 으로 흘려보내셔도 될 것 같습니다.
안녕하세요.
CSV 파일을 만들어보셨다면 아실 것 같은데..
GT_EXCEL 필드 간 TAB 코드를 넣어서 LV_FILE로 흘려보시면 어떨까요?
TRANSFER GT_EXCEL-FIELD_A TO LV_FILE.
TRANSFER CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB TO LV_FILE.
TRANSFER GT_EXCEL-FIELD_B TO LV_FILE.
TRANSFER CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB TO LV_FILE.
TRANSFER GT_EXCEL-FIELD_C TO LV_FILE.
TRANSFER CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB TO LV_FILE.
...