이글은 아래 링크의 원본 글에 대한 한글 번역 입니다 (+약간의 내용 추가)

https://scn.sap.com/community/web-dynpro-abap/blog/2012/04/05/upload-xlsx-file-in-webdynpro-abap-and-view-its-content

더 발전된 코드 웹딘프로아밥 XLSX 엑셀파일 업로드 펑션: https://boy0.tistory.com/107

 

웹딘프로아밥 XLSX 엑셀파일 업로드 예제

Posted by Ashish Shah in Web Dynpro ABAP on Apr 5, 2012 2:20:52 PM

Upload XLSX file in WebDynpro ABAP and view its content

 

웹딘프로아밥 게시판에는 엑셀 파일을 읽어서 그 내용을 화면에 테이블로 보여주기를 원하는 많은 글이 있습니다. 그런데 대부분은 답변이 없는 상태로 남아있죠. 그 이유는 스탠다드 기능만으로 바로 엑셀파일을 다룰 수 있는 방법이 없기 때문입니다.

 

새로운 해결 방법은 바로 ABAP2XLSX 프로젝트를 통해서 가능합니다!!!


준비:

  1. SAPlink 최신버전 설치 https://boy0.tistory.com/96
  2. SAPlink 플러그인 설치
  3. ABAP2XLSX 설치 https://boy0.tistory.com/95
  4. 샘플 데이터를 입력한 XLSX 엑셀파일
  5. (필수는 아님) 개선사항을 업데이트 받기위해 ABAP2XLS 와 SAPLINK 그룹에 가입하기
    https://cw.sdn.sap.com/cw/groups/saplink and https://cw.sdn.sap.com/cw/groups/abap2xlsx


파일업로드 UI 엘리먼트가 있는 웹딘프로아밥 만들기:

  1. 티코드 SE80에서 웹딘프로아밥 컴포넌트를 생성합니다.
  2. 뷰의 context 탭에서 "upload_content" 노드를 만들고 그 아래에 타입이 XSTRING인  "file_content" 어트리뷰트를 만듭니다.
  3. layout 탭에서 파일업로드 UI 엘리먼트를 추가 하고 data 속성에 XSTRING 어트리뷰트를 바인딩합니다. WD View.jpg
  4. 버튼을 추가하고 action: upload를 지정합니다.
  5. 아래 코드를 사용하여 엑셀 2007포맷의 .xlsx 파일을 읽을 수 있습니다.

 

Method OnActionUpload.
METHOD onactionupload .
DATA lo_nd_upload_content    TYPE REF TO if_wd_context_node.
DATA lo_el_upload_content    TYPE REF TO if_wd_context_element.
DATA ls_upload_content       TYPE wd_this->element_upload_content.
DATA: lo_componentcontroller  TYPE REF TO ig_componentcontroller,
lo_current_controller   TYPE REF TO if_wd_controller,
lo_view_controller      TYPE REF TO if_wd_view_controller,
lo_message_manager      TYPE REF TO if_wd_message_manager .
DATA: excel                   TYPE REF TO zcl_excel,
lo_excel_writer         TYPE REF TO zif_excel_writer,
  reader                  TYPE REF TO zif_excel_reader.
DATA: worksheet               TYPE REF TO zcl_excel_worksheet,
highest_column          TYPE zexcel_cell_column,
highest_row             TYPE int4,
column                  TYPE zexcel_cell_column VALUE 1,
col_str                 TYPE zexcel_cell_column_alpha,
row                     TYPE int4               VALUE 1,
value                   TYPE zexcel_cell_value.
DATA: ex                      TYPE REF TO zcx_excel,
msg                     TYPE string,
lv_highest_row          TYPE string,
lv_highest_column       TYPE string,
lv_rowdata              TYPE string,
lv_rownumber            TYPE string.

lo_current_controller ?= wd_this->wd_get_api( ).
lo_message_manager = lo_current_controller->get_message_manager( ).
lo_view_controller = wd_this->wd_get_api( ).

*   navigate from  to  via lead selection
lo_nd_upload_content = wd_context->get_child_node( name = wd_this->wdctx_upload_content ).

*   get element via lead selection
lo_el_upload_content = lo_nd_upload_content->get_element( ).

*   get all declared attributes
  lo_el_upload_content->get_static_attributes(
IMPORTING
static_attributes = ls_upload_content ).

TRY.
CREATE OBJECT reader TYPE zcl_excel_reader_2007.
excel = reader->load( ls_upload_content-file_content ).

worksheet = excel->get_active_worksheet( ).
highest_column = worksheet->get_highest_column( ).
MOVE highest_column TO lv_highest_column.
highest_row    = worksheet->get_highest_row( ).
MOVE highest_row TO lv_highest_row.
CONCATENATE 'Highest column: ' lv_highest_column  'Highest row: '  lv_highest_row INTO msg.
CALL METHOD lo_message_manager->report_message
EXPORTING
message_text = msg.

CLEAR lv_rowdata.

WHILE row <= highest_row.
WHILE column <= highest_column.
col_str = zcl_excel_common=>convert_column2alpha( column ).
worksheet->get_cell(
EXPORTING
ip_column = col_str
ip_row    = row
IMPORTING
ep_value = value
).
CONCATENATE lv_rowdata value INTO lv_rowdata SEPARATED BY space.
column       = column + 1.
ENDWHILE.
CLEAR msg.
MOVE row TO lv_rownumber.
CONCATENATE 'Row# ' lv_rownumber ' Data = ' lv_rowdata INTO msg.
CLEAR lv_rowdata.
CALL METHOD lo_message_manager->report_message
EXPORTING
message_text = msg.
column = 1.
row = row + 1.
ENDWHILE.

CATCHzcx_excel INTO ex.    ” Exceptions for ABAP2XLSX
CLEAR msg.
msg = ex->error.

*  report message
CALL METHOD lo_message_manager->report_message
EXPORTING
message_text = msg.

ENDTRY.
ENDMETHOD.

 

샘플 엑셀 파일 내용

Excel File.jpg

 

엑샐 파일을 업로드 하는 웹딘프로아밥 프로그램 예:

WDA Application.jpg


결과 :

WDA Application Output.jpg

 

행복하세요!!!!

관심있는 댓글 환영합니다.

 

 

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다 (+약간의 내용 추가)

https://scn.sap.com/community/web-dynpro-abap/blog/2012/04/05/upload-xlsx-file-in-webdynpro-abap-and-view-its-content

더 발전된 코드 웹딘프로아밥 XLSX 엑셀파일 업로드 펑션: https://boy0.tistory.com/107

+ Recent posts