2021-10-14 수정
abap2xlsx helper 를 만들었습니다. 더 쉽고 편리합니다.
abap2xlsx helper
취미로 개발중인 프로그램... https://github.com/boy0korea/ABAP2XLSX_HELPER ZCL_ABAP2XLSX_HELPER=>EXCEL_DOWNLOAD 인터널 테이블 내용을 엑셀 파일로 다운로드 합니다. ZCL_ABAP2XLSX_HELPER=>EXCEL_EMAIL 인..
boy0.tistory.com
**********************************************************************
안녕하세요.
ABAP2XLSX 를 활용한 엑셀 다운로드 입니다. (설치방법: http://boy0.tistory.com/95)
인터널 테이블을 넣으면 엑셀 파일 다운로드를 시작합니다.
옵션 파라미터 4개가 있는데,
IV_FOR_UPLOAD : 나중에 업로드를 위한 다운로드 파일로 DATE와 TIME을 엑셀포맷이 아닌 일반문자로 바꿔줍니다.
IT_FIELD_CATALOG : 필드 레이블을 변경할 수 있습니다. zcl_excel_common=>get_fieldcatalog( ) 호출하여 생성.
IV_FILENAME : 파일명 (기본 export.xlsx)
IV_SHEET_TITLE : 시트명 (기본 Export)
FUNCTION ZWD_EXCEL_DOWNLOAD.
*"--------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IV_FOR_UPLOAD) TYPE FLAG OPTIONAL
*" REFERENCE(IT_FIELD_CATALOG) TYPE ZEXCEL_T_FIELDCATALOG
*" OPTIONAL
*" REFERENCE(IV_FILENAME) TYPE CSEQUENCE OPTIONAL
*" REFERENCE(IV_SHEET_TITLE) TYPE CSEQUENCE OPTIONAL
*" REFERENCE(IV_AUTO_COLUMN_WIDTH) TYPE FLAG DEFAULT ABAP_TRUE
*" EXPORTING
*" REFERENCE(EV_ERROR_TEXT) TYPE STRING
*" TABLES
*" IT_TABLE TYPE TABLE
*"--------------------------------------------------------------------
* 오픈소스 abap2xlsx 설치가 필요합니다. http://www.abap2xlsx.org
DATA: lo_excel TYPE REF TO zcl_excel,
lo_writer TYPE REF TO zif_excel_writer,
lo_worksheet TYPE REF TO zcl_excel_worksheet,
ls_table_settings TYPE zexcel_s_table_settings,
lt_field_catalog TYPE zexcel_t_fieldcatalog,
ls_field_catalog TYPE zexcel_s_fieldcatalog,
lv_xstring TYPE xstring,
lo_zcx_excel TYPE REF TO zcx_excel,
lv_sheet_title TYPE zexcel_sheet_title,
lv_filename_string TYPE string,
lv_filename_path TYPE string,
lv_filename_fullpath TYPE string,
lv_bin_filesize TYPE i,
lt_temptable TYPE w3mimetabtype,
lv_index TYPE i.
CLEAR ev_error_text.
TRY.
" Creates active sheet
CREATE OBJECT lo_excel.
" Get active sheet
IF iv_sheet_title IS NOT INITIAL.
lv_sheet_title = iv_sheet_title.
ELSE.
lv_sheet_title = 'Export'.
ENDIF.
lo_worksheet = lo_excel->get_active_worksheet( ).
lo_worksheet->set_title( ip_title = lv_sheet_title ).
ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2.
ls_table_settings-show_row_stripes = abap_true.
ls_table_settings-nofilters = abap_true.
IF it_field_catalog IS NOT INITIAL.
lt_field_catalog = it_field_catalog.
SORT lt_field_catalog BY position fieldname.
LOOP AT lt_field_catalog INTO ls_field_catalog.
lv_index = sy-tabix.
IF ls_field_catalog-position <> lv_index.
ls_field_catalog-position = lv_index.
MODIFY lt_field_catalog FROM ls_field_catalog INDEX lv_index TRANSPORTING position.
ENDIF.
ENDLOOP.
ELSE.
lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = it_table[] ).
ENDIF.
IF iv_for_upload EQ abap_true.
ls_field_catalog-dynpfld = abap_true.
MODIFY lt_field_catalog FROM ls_field_catalog TRANSPORTING dynpfld WHERE dynpfld EQ abap_false.
ls_field_catalog-abap_type = 'C'.
MODIFY lt_field_catalog FROM ls_field_catalog TRANSPORTING abap_type WHERE abap_type EQ 'D'. "Date -> Char
MODIFY lt_field_catalog FROM ls_field_catalog TRANSPORTING abap_type WHERE abap_type EQ 'T'. "Time -> Char
ENDIF.
lo_worksheet->bind_table( ip_table = it_table[]
it_field_catalog = lt_field_catalog
is_table_settings = ls_table_settings ).
* iv_no_header = iv_no_header
* iv_no_table_setting = iv_no_table_setting ).
IF iv_auto_column_width EQ abap_true.
LOOP AT lt_field_catalog INTO ls_field_catalog WHERE dynpfld = abap_true.
lo_worksheet->set_column_width(
EXPORTING
ip_column = zcl_excel_common=>convert_column2alpha( ls_field_catalog-position )
ip_width_autosize = abap_true
).
ENDLOOP.
ENDIF.
lo_worksheet->freeze_panes( ip_num_rows = 1 ). "freeze column headers when scrolling
*** Create output
CREATE OBJECT lo_writer TYPE zcl_excel_writer_2007.
lv_xstring = lo_writer->write_file( lo_excel ).
CATCH zcx_excel INTO lo_zcx_excel. " Exceptions for ABAP2XLSX
ev_error_text = lo_zcx_excel->error.
RETURN.
* IF NOT MSG IS INITIAL.
**Raise exception message
* ENDIF.
ENDTRY.
lv_filename_string = iv_filename.
IF iv_filename IS INITIAL.
lv_filename_string = |export_{ sy-datum }_{ sy-uzeit }.xlsx|.
ENDIF.
IF wdr_task=>application_name IS NOT INITIAL.
CALL METHOD cl_wd_runtime_services=>attach_file_to_response
EXPORTING
i_filename = lv_filename_string
i_content = lv_xstring
i_mime_type = 'xlsx'
* i_in_new_window = ABAP_FALSE
* i_inplace = ABAP_FALSE
.
ELSE.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xstring
IMPORTING
output_length = lv_bin_filesize
TABLES
binary_tab = lt_temptable.
cl_gui_frontend_services=>file_save_dialog(
EXPORTING
* window_title = window_title " Window Title
* default_extension = default_extension " Default Extension
default_file_name = lv_filename_string " Default File Name
* with_encoding = with_encoding
file_filter = '*.xlsx' " File Type Filter Table
* initial_directory = initial_directory " Initial Directory
* prompt_on_overwrite = 'X'
CHANGING
filename = lv_filename_string " File Name to Save
path = lv_filename_path " Path to File
fullpath = lv_filename_fullpath " Path + File Name
* user_action = user_action " User Action (C Class Const ACTION_OK, ACTION_OVERWRITE etc)
* file_encoding = file_encoding
EXCEPTIONS
OTHERS = 5
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF lv_filename_fullpath IS NOT INITIAL.
cl_gui_frontend_services=>gui_download(
EXPORTING
bin_filesize = lv_bin_filesize
filename = lv_filename_fullpath
filetype = 'BIN'
CHANGING
data_tab = lt_temptable
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDIF.
ENDFUNCTION.
참고로 업로드 펑션은 여기 있습니다.
'ABAP > Web Dynpro ABAP(WDA)' 카테고리의 다른 글
접속한 IP 주소 가져오는 펑션 (0) | 2016.09.09 |
---|---|
유니코드 공백 문자 (0) | 2016.09.08 |
웹딘프로아밥 XLSX 엑셀파일 업로드 펑션 (0) | 2016.09.07 |
[번역] 웹딘프로아밥 XLSX 엑셀파일 업로드 예제 (0) | 2016.09.07 |
웹딘프로아밥 ALV 테이블 색상표 (0) | 2016.08.29 |