본문 바로가기

Abap

[Abap-Excel] 엑셀에 데이터 넘기기 1 (매크로) - Abap 부분

  FORM dsp_excel_graph USING p_mptyp.

*> Variables of Excel open
  DATAlo_factory     TYPE REF TO i_oi_document_factory,
        lo_link_server TYPE REF TO i_oi_link_server,
        lo_document    TYPE REF TO i_oi_document_proxy,
        lo_retcode     TYPE        t_oi_ret_string.

  DATAlv_doc_size       TYPE i,
        lv_doc_format(80TYPE c,
        lv_doc_type(80)   VALUE soi_doctype_excel97_sheet" Excel
        lt_doc_table      LIKE w3mime OCCURS 0.


  DATABEGIN OF lt_title OCCURS 0,
title(20),
  END OF lt_title.

  DATAl_app_name(30).

  DATAlc_obj_workseet(50TYPE c.

  DATAlv_index TYPE i.
  LOOP AT gt_month1.
    IF gt_month1-psort IS INITIAL.
      CLEAR lv_index.
      lv_index sy-tabix.
      DELETE gt_month1 INDEX lv_index.
    ENDIF.
  ENDLOOP.

  CHECK gt_month1[] IS NOT INITIAL.

  " ABAP05 수정.
  DATABEGIN OF lt_month1 OCCURS 0,
01day(10),
02day(10),
03day(10),
04day(10),
05day(10),
06day(10),
07day(10),
08day(10),
09day(10),
10day(10),
11day(10),
12day(10),
13day(10),
14day(10),
15day(10),
16day(10),
17day(10),
18day(10),
19day(10),
20day(10),
21day(10),
22day(10),
23day(10),
24day(10),
25day(10),
26day(10),
27day(10),
28day(10),
29day(10),
30day(10),
31day(10),
zploc(20),   "공장구분.
pdtype(20),  "생산구분.
psort(20),    "위치번호.
mpoint(20),  "계량기번호.
pttxt(20),     "내역.
mpgrp(20),   "집계그룹.

    sum_value1(10)" 합계-공통.
      sum_value2(10)"합계-1공장.
      sum_value3(10)"합계-2공장.
      sum_value4(10)"합계-3공장.

      value11(10),  "HT-공통
      value12(10),  "HT-1공장.
      value13(10),  "HT-2공장.
      value14(10)"HT-3공장.

      value21(10),  "PH-공통
      value22(10),  "PH-1공장.
      value23(10),  "PH-2공장.
      value24(10)"PH-3공장.

      value31(10),    "SB-공통
      value32(10),    "SB-1공장.
      value33(10),    "SB-2공장.
      value34(10),   "SB-3공장.

      value41(10),     "WB-공통
      value42(10),     "WB-1공장.
      value43(10),     "WB-2공장.
      value44(10),    "WB-3공장.

      value51(10),    "R-공통
      value52(10),    "R-1공장.
      value53(10),    "R-2공장.
      value54(10),   "R-3공장.

      value61(10),    "TB-공통
      value62(10),    "TB-1공장.
      value63(10),    "TB-2공장.
      value64(10),   "TB-3공장.

END OF lt_month1.

  "Summanry.
  DATABEGIN OF lt_summary OCCURS 0,
    zploc(20),   "공장구분.
    mpgrp(20),   "집계그룹.

      sum_value1(10)" 합계-공통.
      sum_value2(10)"합계-1공장.
      sum_value3(10)"합계-2공장.
      sum_value4(10)"합계-3공장.

      value11(10),  "HT-공통
      value12(10),  "HT-1공장.
      value13(10),  "HT-2공장.
      value14(10)"HT-3공장.

      value21(10),  "PH-공통
      value22(10),  "PH-1공장.
      value23(10),  "PH-2공장.
      value24(10)"PH-3공장.

      value31(10),    "SB-공통
      value32(10),    "SB-1공장.
      value33(10),    "SB-2공장.
      value34(10),   "SB-3공장.

      value41(10),     "WB-공통
      value42(10),     "WB-1공장.
      value43(10),     "WB-2공장.
      value44(10),    "WB-3공장.

      value51(10),    "R-공통
      value52(10),    "R-1공장.
      value53(10),    "R-2공장.
      value54(10),   "R-3공장.

      value61(10),    "TB-공통
      value62(10),    "TB-1공장.
      value63(10),    "TB-2공장.
      value64(10),   "TB-3공장.

      END OF lt_summary.

  DATABEGIN OF lt_month1_sum OCCURS 0,
    zploc LIKE zpbpmt7005-zploc,
    mpgrp LIKE zpbpmt7005-mpgrp,
    value TYPE i,
  END OF lt_month1_sum.

  "공장 & 집계그룹별 합계.
  IF p_mptyp EQ 'G'.
    LOOP AT gt_month1.

      lt_month1_sum-value =     gt_month1-01day +
                                gt_month1-02day +  gt_month1-03day +
                                gt_month1-04day +  gt_month1-05day +
                                gt_month1-06day +  gt_month1-07day +
                                gt_month1-08day +  gt_month1-09day +
                                gt_month1-10day +  gt_month1-11day +
                                gt_month1-12day +  gt_month1-13day +
                                gt_month1-14day +  gt_month1-15day +
                                gt_month1-16day +  gt_month1-17day +
                                gt_month1-18day +  gt_month1-19day +
                                gt_month1-20day +  gt_month1-21day +
                                gt_month1-22day +  gt_month1-23day +
                                gt_month1-24day +  gt_month1-25day +
                                gt_month1-26day +  gt_month1-27day +
                                gt_month1-28day +  gt_month1-29day +
                                gt_month1-30day +  gt_month1-31day .


      SELECT SINGLE mpgrp INTO lt_month1_sum-mpgrp FROM zpbpmt7005
      WHERE mpoint EQ gt_month1-mpoint.

      lt_month1_sum-zploc gt_month1-zploc.
      COLLECT lt_month1_sum.

    ENDLOOP.

    "공장 & 집계그룹별 합계 itab.
    LOOP AT lt_month1_sum.

      IF lt_month1_sum-zploc EQ '1'.

        IF lt_month1_sum-mpgrp EQ 'G1'.
          lt_summary-value12 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G2'.
          lt_summary-value22 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G3'.
          lt_summary-value32 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G4'.
          lt_summary-value42 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G5'.
          lt_summary-value52 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G6'.
          lt_summary-value62 lt_month1_sum-value.
        ENDIF.
        lt_summary-sum_value2  =  lt_summary-value12 +
        lt_summary-value22 + lt_summary-value32 + lt_summary-value42 +
        lt_summary-value52 + lt_summary-value62.

      ELSEIF lt_month1_sum-zploc EQ '2'.

        IF lt_month1_sum-mpgrp EQ 'G1'.
          lt_summary-value13 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G2'.
          lt_summary-value23 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G3'.
          lt_summary-value33 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G4'.
          lt_summary-value43 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G5'.
          lt_summary-value53 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G6'.
          lt_summary-value63 lt_month1_sum-value.
        ENDIF.
        lt_summary-sum_value3  =  lt_summary-value13 +
        lt_summary-value23 + lt_summary-value33 + lt_summary-value43 +
        lt_summary-value53 + lt_summary-value63.

      ELSEIF lt_month1_sum-zploc EQ '3'.

        IF lt_month1_sum-mpgrp EQ 'G1'.
          lt_summary-value14 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G2'.
          lt_summary-value24 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G3'.
          lt_summary-value34 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G4'.
          lt_summary-value44 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G5'.
          lt_summary-value54 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G6'.
          lt_summary-value64 lt_month1_sum-value.
        ENDIF.
        lt_summary-sum_value4  =  lt_summary-value14 +
        lt_summary-value24 + lt_summary-value34 + lt_summary-value44 +
        lt_summary-value54 + lt_summary-value64.

      ELSEIF lt_month1_sum-zploc EQ '0'.

        IF lt_month1_sum-mpgrp EQ 'G1'.
          lt_summary-value11 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G2'.
          lt_summary-value21 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G3'.
          lt_summary-value31 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G4'.
          lt_summary-value41 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G5'.
          lt_summary-value51 lt_month1_sum-value.
        ELSEIF lt_month1_sum-mpgrp EQ 'G6'.
          lt_summary-value61 lt_month1_sum-value.
        ENDIF.
        lt_summary-sum_value1  =  lt_summary-value11 +
        lt_summary-value21 + lt_summary-value31 + lt_summary-value41 +
        lt_summary-value51 + lt_summary-value61.

      ENDIF.

      IF lt_summary[] IS INITIAL.
        APPEND lt_summary.
      ELSE.
        MODIFY lt_summary INDEX 1.
      ENDIF.

    ENDLOOP.
  ENDIF.


  DATAlv_check1(1).
  CLEAR lv_check1.

  DATAlv_dat LIKE i_dat1.
  IF p_mptyp EQ 'G'.
    lv_dat i_dat1.
  ELSEIF p_mptyp EQ 'W'.
    lv_dat i_dat3 .
  ENDIF.

  LOOP AT gt_month1.
    IF lv_check1 IS INITIAL.
      lv_check1 'X'.
      lt_month1-psort '계량기번호'(t51).
      lt_month1-pttxt '내역'(t52).
      CONCATENATE lv_dat+4(2'/01' INTO  lt_month1-01day.
      CONCATENATE lv_dat+4(2'/02' INTO  lt_month1-02day.
      CONCATENATE lv_dat+4(2'/03' INTO  lt_month1-03day.
      CONCATENATE lv_dat+4(2'/04' INTO  lt_month1-04day.
      CONCATENATE lv_dat+4(2'/05' INTO  lt_month1-05day.
      CONCATENATE lv_dat+4(2'/06' INTO  lt_month1-06day.
      CONCATENATE lv_dat+4(2'/07' INTO  lt_month1-07day.
      CONCATENATE lv_dat+4(2'/08' INTO  lt_month1-08day.
      CONCATENATE lv_dat+4(2'/09' INTO  lt_month1-09day.
      CONCATENATE lv_dat+4(2'/10' INTO  lt_month1-10day.
      CONCATENATE lv_dat+4(2'/11' INTO  lt_month1-11day.
      CONCATENATE lv_dat+4(2'/12' INTO  lt_month1-12day.
      CONCATENATE lv_dat+4(2'/13' INTO  lt_month1-13day.
      CONCATENATE lv_dat+4(2'/14' INTO  lt_month1-14day.
      CONCATENATE lv_dat+4(2'/15' INTO  lt_month1-15day.
      CONCATENATE lv_dat+4(2'/16' INTO  lt_month1-16day.
      CONCATENATE lv_dat+4(2'/17' INTO  lt_month1-17day.
      CONCATENATE lv_dat+4(2'/18' INTO  lt_month1-18day.
      CONCATENATE lv_dat+4(2'/19' INTO  lt_month1-19day.
      CONCATENATE lv_dat+4(2'/20' INTO  lt_month1-20day.
      CONCATENATE lv_dat+4(2'/21' INTO  lt_month1-21day.
      CONCATENATE lv_dat+4(2'/22' INTO  lt_month1-22day.
      CONCATENATE lv_dat+4(2'/23' INTO  lt_month1-23day.
      CONCATENATE lv_dat+4(2'/24' INTO  lt_month1-24day.
      CONCATENATE lv_dat+4(2'/25' INTO  lt_month1-25day.
      CONCATENATE lv_dat+4(2'/26' INTO  lt_month1-26day.
      CONCATENATE lv_dat+4(2'/27' INTO  lt_month1-27day.
      CONCATENATE lv_dat+4(2'/28' INTO  lt_month1-28day.
      CONCATENATE lv_dat+4(2'/29' INTO  lt_month1-29day.
      CONCATENATE lv_dat+4(2'/30' INTO  lt_month1-30day.
      CONCATENATE lv_dat+4(2'/31' INTO  lt_month1-31day.

      IF p_mptyp EQ 'G'.
        READ TABLE lt_summary INDEX 1.
        MOVE-CORRESPONDING lt_summary TO lt_month1.
      ENDIF.

      APPEND lt_month1.
    ENDIF.
    MOVE-CORRESPONDING gt_month1 TO lt_month1.
    SELECT SINGLE mpgrp INTO lt_month1-mpgrp FROM zpbpmt7005
WHERE mpoint EQ gt_month1-mpoint.

*    read table lt_summary index 1.
*    MOVE-CORRESPONDING lt_summary to lt_month1.

    APPEND lt_month1.
  ENDLOOP.



  "ㅡㅡㅡㅡ 여기까지 수정.




  CASE p_mptyp.
    WHEN 'G'.     "Gas
      lc_obj_workseet ='ZPBPM7005_G'.
      l_app_name 'Utility Usage - Gas'.
    WHEN 'W'.     "Water
      lc_obj_workseet ='ZPBPM7005_W'.
      l_app_name 'Utility Usage - Water'.
  ENDCASE.

*> Create Control
  CALL METHOD c_oi_factory_creator=>get_document_factory
    IMPORTING
      factory lo_factory
      retcode lo_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

  CALL METHOD lo_factory->start_factory
    EXPORTING
      r3_application_name l_app_name
    IMPORTING
      retcode             lo_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

  CALL METHOD lo_factory->get_link_server
    IMPORTING
      link_server lo_link_server
      retcode     lo_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.


*> LINK_SERVER_MODE: 1(STANDARD NAME) DEFAULT
*>                   0(INACTIVE)
*>                   2(CUSTOMER NAME)
*>                   3(UNIQUE NAME)
  CALL METHOD lo_link_server->start_link_server
    EXPORTING
      link_server_mode 3
    IMPORTING
      retcode          lo_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

*> Connecting of Excel display Itab
  IF lt_month1[] IS NOT INITIAL.
    CALL METHOD lo_link_server->add_table_item2
      EXPORTING
        item_name  'ITAB' " MACRO definition
      IMPORTING
        retcode    lo_retcode
      CHANGING
*        data_table = gt_month1[].   " Table
"ABAP05 수정.
       data_table lt_month1[].   " Table

    CALL METHOD c_oi_errors=>show_message
      EXPORTING
        type 'E'.
  ENDIF.


*> Get definition Document in T-code "SMW0"
  CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
    EXPORTING
      object_id        lc_obj_workseet    " Doc.
    IMPORTING
      data_size        lv_doc_size
      document_format  lv_doc_format
      document_type    lv_doc_type
    TABLES
      data_table       lt_doc_table
    EXCEPTIONS
      object_not_found 1
      internalv_error  2
      OTHERS           3.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

*> Connecting Factory and Document
  CALL METHOD lo_factory->get_document_proxy
    EXPORTING
      document_type  lv_doc_type
    IMPORTING
      document_proxy lo_document
      retcode        lo_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

*> Display of downloading excle file
  CALL METHOD lo_document->open_document_from_table
    EXPORTING
      document_table lt_doc_table[]
      document_size  lv_doc_size
    IMPORTING
      retcode        lo_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

*> Call macro
  CALL METHOD lo_document->execute_macro
    EXPORTING
      macro_string 'WORK'         "Macro name to be executed
      param_count  0
    IMPORTING
      retcode      lo_retcode.

  CALL METHOD c_oi_errors=>show_message
    EXPORTING
      type 'E'.

ENDFORM.                    " DSP_EXCEL_GRAPH