ABAP EXCEL 模板

*&---------------------------------------------------------------------*
*& REPORT  ZEPB008
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZEPB008.

DATA:  BEGIN  OF GT_APLZL  OCCURS 0,
      LTXA2  LIKE AFVC-LTXA1,
      LTXA1  LIKE AFVC-LTXA1,
      APLZL  LIKE AFVC-APLZL,
      AUFPL  LIKE AFVC-AUFPL,
      ANLZU  LIKE AFVC-ANLZU,
      NUMBE(4) ,
      SUM_VERPR  LIKE MBEW-VERPR,
       END  OF GT_APLZL.
DATA:  BEGIN  OF GT_APLZL2  OCCURS 0,
      APLZL  LIKE AFVC-APLZL,
      LTXA2  LIKE AFVC-LTXA1,
      LTXA1  LIKE AFVC-LTXA1,
      AUFPL  LIKE AFVC-AUFPL,
      ANLZU  LIKE AFVC-ANLZU,
      NUMBE(4) ,
      SUM_VERPR  LIKE MBEW-VERPR,
       END  OF GT_APLZL2.
DATA: G_APLZL  LIKE AFVC-APLZL,
      G_LTXA1  LIKE AFVC-LTXA1.
DATA:  BEGIN  OF GT_MATNR  OCCURS 0,
      MATNR(19)  TYPE C,
      MAKTX  LIKE ZEPTM003-MAKTX,
      MEINS  LIKE RESB-MEINS,
      BDMNG  LIKE RESB-BDMNG,
      APLZL  LIKE AFVC-APLZL,
      ZLINE  TYPE TDLINE,
      RSNUM  LIKE RESB-RSNUM,
      RSPOS  LIKE RESB-RSPOS,
      VERPR  LIKE MBEW-VERPR,
      SUM_VERPR  LIKE MBEW-VERPR,
      MSEHL  LIKE T006A-MSEHL,
      ABLAD  LIKE RESB-ABLAD,
      LGORT  LIKE RESB-LGORT,
       END  OF GT_MATNR.
DATA: TDLINES  TYPE TLINE  OCCURS  WITH  HEADER LINE.
DATA: ZNAME  LIKE THEAD-TDNAME.
DATA: G_GNXYQ  TYPE STRING.
DATA: G_BGNX  TYPE STRING.
DATA: G_BGNX2  TYPE STRING.
DATA: G_GCZJE  TYPE STRING.
DATA: G_GCZJE_BIG  TYPE STRING.
DATA: ROW_INDEX  TYPE I.
DATA:  BEGIN  OF GT_NUMBE  OCCURS 0,
      NUMBE(6)  TYPE C,
       END  OF GT_NUMBE.
DATA: G_IND  TYPE  VALUE 0,
G_SIN_NUM  TYPE I,
G_DACH(3)  TYPE C.
DATA: GR_CUSTOM_CONTAINER  TYPE  REF  TO CL_GUI_CUSTOM_CONTAINER.
DATA: GR_CONTAINER  TYPE  REF  TO CL_GUI_CONTAINER,
      GR_CONTROL  TYPE  REF  TO I_OI_CONTAINER_CONTROL,
      GR_DOCUMENT  TYPE  REF  TO I_OI_DOCUMENT_PROXY,
      GR_SPREADSHEET  TYPE  REF  TO I_OI_SPREADSHEET,
      GR_SPLITTER  TYPE  REF  TO CL_GUI_SPLITTER_CONTAINER.

* BUSINESS DOCUMENT SYSTEM
DATA: GR_BDS_DOCUMENTS  TYPE  REF  TO CL_BDS_DOCUMENT_SET,
      G_CLASSNAME  TYPE SBDST_CLASSNAME,
      G_CLASSTYPE  TYPE SBDST_CLASSTYPE,
      G_OBJECTKEY  TYPE SBDST_OBJECT_KEY,
      G_DOC_COMPONENTS  TYPE SBDST_COMPONENTS,
      G_DOC_SIGNATURE  TYPE SBDST_SIGNATURE.

* TEMPLATE URL
DATA: GT_BDS_URIS  TYPE SBDST_URI,
      GS_BDS_URL  LIKE  LINE  OF GT_BDS_URIS,
      G_TEMPLATE_URL(256)  TYPE C.

DATA: G_OBJNR  TYPE J_OBJNR,
      G_A6  TYPE STRING,
      G_A5  TYPE STRING,
      G_A4  TYPE STRING,
      G_A3  TYPE STRING,
      G_A2  TYPE STRING,
      G_A1  TYPE STRING,
      G_NACHN  LIKE PA0002-NACHN,
      G_VORNA  LIKE PA0002-VORNA,
      G_WERKS  LIKE CAUFV-WERKS,
      G_ADDROW(3)  TYPE  VALUE 9,
      G_ADDROW2  TYPE I,
      G_IPHAS  LIKE AFIH-IPHAS,
      G_TABIX  TYPE SY-TABIX..

DATA: GT_RANGES  TYPE SOI_RANGE_LIST,
      GS_RANGE  TYPE SOI_RANGE_ITEM,
      GT_CONTENTS  TYPE SOI_GENERIC_TABLE,
      GS_CONTENT  TYPE SOI_GENERIC_ITEM.
DATA: OK_CODE  TYPE SY-UCOMM,
      SAVE_OK  LIKE OK_CODE.
DATA: G_ILEN  TYPE I.
DATA: G_SUM_VEPRP  LIKE MBEW-VERPR.
DATA: G_TAX  LIKE MBEW-VERPR  VALUE  0.
DATA: G_SUM_MONEY  LIKE MBEW-VERPR  VALUE  0.
DATA:  BEGIN  OF WA_ZEP,
    AUFNR  TYPE CAUFV-AUFNR,
    ERDAT  TYPE CAUFV-ERDAT,
    ATTACH(10)  TYPE C,
    ERNAM  TYPE CAUFV-ERNAM,
    KTEXT  TYPE CAUFV-KTEXT,
    WERKS  TYPE CAUFV-WERKS,
    MATNR  TYPE RESB-MATNR,
    RSPOS  TYPE RESB-RSPOS,
    LTXA1  TYPE AFVC-LTXA1,
    VORNR  TYPE AFVC-VORNR,
    BDMNG  TYPE RESB-BDMNG,
    MEINS  TYPE RESB-MEINS,
    VERPR  TYPE MBEW-VERPR,
    NETWR  TYPE EKPO-NETWR,
    MAKTX  TYPE ZEPTM003-MAKTX,
    RSNUM  TYPE RESB-RSNUM,
    ZLINE  TYPE TDLINE,
    ANLZU  TYPE AFVC-ANLZU,
     END  OF WA_ZEP.
DATA:ITAB_ZEP  LIKE  TABLE  OF WA_ZEP.
DATA:G_GLLR  TYPE EKPO-NETWR.
DATA:G_GLLR2  TYPE EKPO-NETWR.
DATA:G_UNAME  TYPE SY-UNAME.
DATA: G_NETWR  TYPE EKPO-NETWR,
      G_VALUE  TYPE F.

DEFINE WRITE_CONTENT_CELL.
  GS_CONTENT-ROW = &1.
  GS_CONTENT-COLUMN = &2.
  GS_CONTENT-VALUE = &3.
   APPEND GS_CONTENT  TO GT_CONTENTS.
   CLEAR GS_CONTENT.
END-OF-DEFINITION.

SELECTION-SCREEN  BEGIN  OF   BLOCK T1  WITH  FRAME  TITLE X1.
PARAMETERS : P_AUFNR  LIKE CAUFV-AUFNR.
SELECTION-SCREEN  END  OF  BLOCK T1.

AT  SELECTION-SCREEN .
   SELECT  SINGLE IPHAS  FROM AFIH
     INTO G_IPHAS
   WHERE AUFNR = P_AUFNR.
   IF G_IPHAS <>  2.
     MESSAGE E000(ZEP_CE)  WITH  '訂單未核發,無法列印'.
  ENDIF.

INITIALIZATION.
  X1 =  '查詢條件'.
  G_CLASSNAME =  'HRFPM_EXCEL_STANDARD'.
  G_CLASSTYPE =  'OT'.
   " G_OBJECTKEY = 'DOI_EXCEL'.


START-OF-SELECTION.
   SELECT T2~APLZL T2~LTXA1 T2~ANLZU T2~AUFPL
     INTO CORRESPONDING  FIELDS  OF  TABLE GT_APLZL
     FROM CAUFV  AS T1
     JOIN AFVC  AS T2
     ON T1~AUFPL = T2~AUFPL
   WHERE AUFNR = P_AUFNR.


  CLEAR:G_NETWR,G_GLLR,G_GLLR2,G_UNAME,ITAB_ZEP,ITAB_ZEP[].
   SELECT T1~AUFNR T1~ERDAT T1~ERNAM T1~KTEXT  T2~MATNR T2~RSPOS T3~LTXA1 T3~VORNR T1~WERKS T2~BDMNG T2~MEINS T2~RSNUM T2~GPREIS  AS VERPR T3~ANLZU
   INTO CORRESPONDING  FIELDS  OF  TABLE ITAB_ZEP
   FROM CAUFV  AS T1
   JOIN RESB  AS T2
   ON T1~AUFNR = T2~AUFNR
   JOIN AFVC  AS T3
   ON T2~AUFPL = T3~AUFPL
   AND T2~APLZL = T3~APLZL
WHERE T2~XLOEK <>  'X'
   AND T1~AUFNR = P_AUFNR.

   LOOP  AT ITAB_ZEP  INTO WA_ZEP.
     IF WA_ZEP-ANLZU =  AND WA_ZEP-ANLZU  IS  NOT INITIAL.
      G_GLLR = WA_ZEP-BDMNG.
    ENDIF.
     IF WA_ZEP-VERPR  IS INITIAL.
       SELECT  SINGLE VERPR
         INTO WA_ZEP-VERPR
       FROM MBEW
       WHERE MATNR = WA_ZEP-MATNR
         AND BWKEY = WA_ZEP-WERKS.
    ENDIF.
     IF WA_ZEP-MATNR  IS  INITIAL  AND WA_ZEP-MEINS =  '%'  AND WA_ZEP-ANLZU  IS INITIAL.
      G_GLLR2 = WA_ZEP-BDMNG + G_GLLR2.
    ENDIF.
    WA_ZEP-NETWR = WA_ZEP-VERPR * WA_ZEP-BDMNG.
    G_NETWR = WA_ZEP-NETWR + G_NETWR.
  ENDLOOP.
  G_GLLR = G_GLLR + G_GLLR2.
  G_NETWR = G_NETWR * G_GLLR /  100 + G_NETWR  .

   CALL  SCREEN  2000.

*&---------------------------------------------------------------------*
*&      Form  MAIN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM MAIN.
   PERFORM GET_CONTAINER.
   PERFORM CREATE_CONTAINER_CONTROL.

   IF G_NETWR <  300000.
*-------小於30萬
    G_OBJECTKEY =  'DOI_EXCEL'.
     PERFORM GET_TEMPLATE_URL.
     PERFORM OPEN_EXCEL_DOC.
     PERFORM WRITE_DATA_TO_EXCEL_LT_30WAN.
  ELSE.
*-------大於30萬
    G_OBJECTKEY  =  'DOI_EXCEL2'.
     PERFORM GET_TEMPLATE_URL.
     PERFORM OPEN_EXCEL_DOC.
     PERFORM WRITE_DATA_TO_EXCEL_GT_30WAN.
  ENDIF.


ENDFORM.                     "MAIN









*&---------------------------------------------------------------------*
*&      MODULE  STATUS_2000  OUTPUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
MODULE STATUS_2000 OUTPUT.
   SET  PF-STATUS  '2000'.
   CASE SY-UCOMM.
     WHEN  'EXIT'  OR  'BACK'  OR  'CANCEL'.
       IF  NOT GR_DOCUMENT  IS INITIAL.
         CALL  METHOD GR_DOCUMENT->CLOSE_DOCUMENT.
         FREE GR_DOCUMENT.
      ENDIF.

       IF  NOT GR_CONTROL  IS INITIAL.
         CALL  METHOD GR_CONTROL->DESTROY_CONTROL.
         FREE GR_CONTROL.
      ENDIF.

       IF GR_CONTAINER  IS  NOT INITIAL.
         CALL  METHOD GR_CONTAINER->FREE.
      ENDIF.
       LEAVE PROGRAM.
     WHEN  'SAVE'.
       PERFORM SAVE_EXCEL.
  ENDCASE.
   PERFORM MAIN.

ENDMODULE.                  " STATUS_2000  OUTPUT
*&---------------------------------------------------------------------*
*&      MODULE  USER_COMMAND_2000  INPUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
MODULE USER_COMMAND_2000 INPUT.


   CASE SY-UCOMM.
     WHEN  'EXIT'  OR  'BACK'  OR  'CANCEL'.
       IF  NOT GR_DOCUMENT  IS INITIAL.
         CALL  METHOD GR_DOCUMENT->CLOSE_DOCUMENT.
         FREE GR_DOCUMENT.
      ENDIF.

       IF  NOT GR_CONTROL  IS INITIAL.
         CALL  METHOD GR_CONTROL->DESTROY_CONTROL.
         FREE GR_CONTROL.
      ENDIF.

       IF GR_CONTAINER  IS  NOT INITIAL.
         CALL  METHOD GR_CONTAINER->FREE.
      ENDIF.
       LEAVE PROGRAM.
     WHEN  'SAVE'.
       PERFORM SAVE_EXCEL.
  ENDCASE.
ENDMODULE.                  " USER_COMMAND_2000  INPUT


*&---------------------------------------------------------------------*
*&      FORM  GET_CONTAINER
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GET_CONTAINER .
   CREATE OBJECT GR_SPLITTER
     EXPORTING
      PARENT  = CL_GUI_CONTAINER=>SCREEN0
       ROWS    1
      COLUMNS =  1.

   CALL  METHOD GR_SPLITTER->SET_BORDER
     EXPORTING
      BORDER = CL_GUI_CFW=>FALSE.

  GR_CONTAINER = GR_SPLITTER->GET_CONTAINER( ROW =  COLUMN =  ).
ENDFORM.                     " GET_CONTAINER
*&---------------------------------------------------------------------*
*&      FORM  CREATE_CONTAINER_CONTROL
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM CREATE_CONTAINER_CONTROL .
* CREATE CONTAINER CONTROL
   CALL  METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
     IMPORTING
       CONTROL = GR_CONTROL.

* INITIALIZE CONTROL
   CALL  METHOD GR_CONTROL->INIT_CONTROL
     EXPORTING
      INPLACE_ENABLED          =  'X '
      INPLACE_SCROLL_DOCUMENTS =  'X'
      REGISTER_ON_CLOSE_EVENT  =  'X'
      REGISTER_ON_CUSTOM_EVENT =  'X'
      R3_APPLICATION_NAME      =  'DOI CREATE BY ZXK'
      PARENT                   = GR_CONTAINER.
ENDFORM.                     " CREATE_CONTAINER_CONTROL
*&---------------------------------------------------------------------*
*&      FORM  GET_TEMPLATE_URL
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GET_TEMPLATE_URL .
   CREATE OBJECT GR_BDS_DOCUMENTS.

   CALL  METHOD CL_BDS_DOCUMENT_SET=>GET_INFO
     EXPORTING
      CLASSNAME  = G_CLASSNAME
      CLASSTYPE  = G_CLASSTYPE
      OBJECT_KEY = G_OBJECTKEY
     CHANGING
      COMPONENTS = G_DOC_COMPONENTS
      SIGNATURE  = G_DOC_SIGNATURE.

   CALL  METHOD CL_BDS_DOCUMENT_SET=>GET_WITH_URL
     EXPORTING
      CLASSNAME  = G_CLASSNAME
      CLASSTYPE  = G_CLASSTYPE
      OBJECT_KEY = G_OBJECTKEY
     CHANGING
      URIS       = GT_BDS_URIS
      SIGNATURE  = G_DOC_SIGNATURE.

   FREE GR_BDS_DOCUMENTS.

   READ  TABLE GT_BDS_URIS  INTO GS_BDS_URL  INDEX  1.
  G_TEMPLATE_URL = GS_BDS_URL-URI.
ENDFORM.                     " GET_TEMPLATE_URL
*&---------------------------------------------------------------------*
*&      FORM  OPEN_EXCEL_DOC
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM OPEN_EXCEL_DOC .
   CALL  METHOD GR_CONTROL->GET_DOCUMENT_PROXY
     EXPORTING
      DOCUMENT_TYPE      =  'EXCEL.SHEET'
      NO_FLUSH           =  'X'
      REGISTER_CONTAINER =  'X'
     IMPORTING
      DOCUMENT_PROXY     = GR_DOCUMENT.

   CALL  METHOD GR_DOCUMENT->OPEN_DOCUMENT
     EXPORTING
      OPEN_INPLACE =  'X'
      DOCUMENT_URL = G_TEMPLATE_URL.

  DATA: AVAILABLE  TYPE I.
   CALL  METHOD GR_DOCUMENT->HAS_SPREADSHEET_INTERFACE
     EXPORTING
      NO_FLUSH     =  'X'
     IMPORTING
      IS_AVAILABLE = AVAILABLE.

   CALL  METHOD GR_DOCUMENT->GET_SPREADSHEET_INTERFACE
     EXPORTING
      NO_FLUSH        =  'X'
     IMPORTING
      SHEET_INTERFACE = GR_SPREADSHEET.

   CALL  METHOD GR_SPREADSHEET->SELECT_SHEET
     EXPORTING
      NAME     =  '(小于30万)标单及大型(大于等于30万)工程多页标单'
      NO_FLUSH =  'X'.
ENDFORM.                     " OPEN_EXCEL_DOC
*&---------------------------------------------------------------------*
*&      FORM  WRITE_DATA_TO_EXCEL
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM WRITE_DATA_TO_EXCEL_LT_30WAN .
  DATA: COL_COUNT  TYPE  VALUE 0,
       ROW_COUNT  TYPE  VALUE  0.

  CLEAR:G_NACHN,G_VORNA,G_WERKS,G_A1,G_A2,G_A3,G_A4,G_A5,G_A6,G_OBJNR,G_TABIX.
   SELECT  SINGLE NACHN VORNA
     INTO (G_NACHN,G_VORNA)
   FROM PA0002
   JOIN CAUFV
   ON PA0002~PERNR = CAUFV~ERNAM
   WHERE CAUFV~AUFNR = P_AUFNR.

   IF G_NACHN  IS  NOT  INITIAL  AND G_VORNA  IS  NOT INITIAL.
     CONCATENATE  '業主聯絡人:' G_NACHN G_VORNA  INTO G_A5.
  ELSE.
     SELECT  SINGLE T3~NAME_LAST
       INTO G_A5
     FROM CAUFV  AS T1
     JOIN USR21  AS T2
       ON T1~ERNAM = T2~BNAME
     JOIN ADRP  AS T3
       ON T2~PERSNUMBER = T3~PERSNUMBER
     WHERE AUFNR = P_AUFNR.
     CONCATENATE  '業主聯絡人:' G_A5  INTO G_A5.
  ENDIF.

   SELECT  SINGLE KTEXT
     INTO G_A4
   FROM CAUFV
   WHERE AUFNR = P_AUFNR.
   CONCATENATE  '工程名稱:' G_A4  INTO G_A4.

   SELECT  SINGLE KTEXT
     INTO G_A2
   FROM CAUFV
   WHERE AUFNR = P_AUFNR.
   CONCATENATE  '(' G_A2  ')標準標單或標單首頁'  INTO G_A2.

   SELECT  SINGLE BUTXT
     INTO G_A1
   FROM CAUFV
   JOIN T001
   ON CAUFV~BUKRS = T001~BUKRS
   WHERE AUFNR = P_AUFNR.

   SELECT  SINGLE WERKS
     INTO G_WERKS
   FROM CAUFV
   WHERE AUFNR = P_AUFNR.
   IF G_WERKS =  'C301'  OR G_WERKS =  'C303'  OR G_WERKS =  'C304'  OR G_WERKS =  'C305'  OR G_WERKS =  'C306'  OR G_WERKS =  'C307'.
     CONCATENATE  '業主名稱:' G_A1  '(團結廠)'  INTO G_A3.
   ELSEIF G_WERKS =  'C302'  OR G_WERKS =  'C308'  OR G_WERKS =  'C309'  OR G_WERKS =  'C310'  OR G_WERKS =  'C311'  OR G_WERKS =  'C312'  OR G_WERKS =  'C313'.
     CONCATENATE  '業主名稱:' G_A1  '(芙蓉廠)'  INTO G_A3.
   ELSEIF G_WERKS =  'C331'  OR G_WERKS =  'C332'  OR G_WERKS =  'C333'.
     CONCATENATE  '業主名稱:' G_A1   INTO G_A3.
  ENDIF.

   CONCATENATE  'OR' P_AUFNR  INTO G_OBJNR.

   SELECT  SINGLE TPLNR
     INTO G_A6
   FROM MCIPMIS
   WHERE OBJNR = G_OBJNR.

   CONCATENATE  '施工地點:' G_A6  INTO G_A6.

   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'A1_A6'
      NO_FLUSH =  'X'
      TOP      =  1
       LEFT     1
       ROWS     6
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'A1_A6'.
  GS_RANGE-ROWS =  6.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.

  CLEAR:GT_CONTENTS[].
  WRITE_CONTENT_CELL  1  G_A1.
  WRITE_CONTENT_CELL  1  G_A2.
  WRITE_CONTENT_CELL  1  G_A3.
  WRITE_CONTENT_CELL  1  G_A4.
  WRITE_CONTENT_CELL  1  G_A5.
  WRITE_CONTENT_CELL  1  G_A6.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.

   LOOP  AT GT_APLZL  WHERE ANLZU <>  1
                      AND ANLZU <>  2.
     SELECT T1~MATNR MEINS BDMNG T2~APLZL T1~RSNUM T1~RSPOS T1~GPREIS  AS VERPR T1~ABLAD T1~LGORT
       APPENDING CORRESPONDING  FIELDS  OF  TABLE GT_MATNR
     FROM RESB  AS T1
       JOIN AFVC  AS T2
     ON T1~AUFPL = T2~AUFPL
       AND T1~APLZL = T2~APLZL
     JOIN CAUFV  AS T3
       ON T1~AUFPL = T3~AUFPL
     WHERE T3~AUFNR = P_AUFNR
       AND T2~APLZL = GT_APLZL-APLZL.

  ENDLOOP.
   LOOP  AT GT_MATNR.
     SELECT  SINGLE MAKTX
       INTO GT_MATNR-MAKTX
     FROM ZEPTM003
     WHERE MATNR = GT_MATNR-MATNR.
     IF GT_MATNR-MAKTX  IS INITIAL.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
    ELSE.
       SELECT  SINGLE MAKTX
        INTO GT_MATNR-MAKTX+0(40)
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
    ENDIF.
     MODIFY GT_MATNR.
  ENDLOOP.
  CLEAR:G_SUM_VEPRP.
   LOOP  AT GT_MATNR.
     IF GT_MATNR-VERPR  IS INITIAL.
       IF GT_MATNR-LGORT <>  'TM11'.
       SELECT  SINGLE VERPR
         INTO GT_MATNR-VERPR
       FROM MBEW
       WHERE BWKEY = G_WERKS
         AND MATNR = GT_MATNR-MATNR.
        ENDIF.
    ENDIF.

  ENDLOOP.
   LOOP  AT GT_APLZL  WHERE ANLZU <>  1
                       AND ANLZU <>  2.
    CLEAR:ROW_COUNT,COL_COUNT.

    CLEAR:GT_MATNR,GT_MATNR[].
     SELECT T1~MATNR  MEINS BDMNG T2~APLZL T1~RSNUM T1~RSPOS T1~GPREIS  AS VERPR T1~ABLAD T1~LGORT
       INTO CORRESPONDING  FIELDS  OF  TABLE GT_MATNR
     FROM RESB  AS T1
       JOIN AFVC  AS T2
     ON T1~AUFPL = T2~AUFPL
       AND T1~APLZL = T2~APLZL
     JOIN CAUFV  AS T3
       ON T1~AUFPL = T3~AUFPL
     WHERE T3~AUFNR = P_AUFNR
       AND T2~APLZL = GT_APLZL-APLZL.
     PERFORM SET_NO.
     LOOP  AT GT_MATNR .
      G_TABIX = SY-TABIX.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX
       FROM ZEPTM003
       WHERE MATNR = GT_MATNR-MATNR.
       IF GT_MATNR-MAKTX  IS INITIAL.
         SELECT  SINGLE MAKTX
           INTO GT_MATNR-MAKTX
         FROM MAKT
         WHERE MATNR = GT_MATNR-MATNR.
       ELSE.
        SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX+0(40)
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
      ENDIF.
      CLEAR:ZNAME,TDLINES,TDLINES[].
       IF GT_MATNR-VERPR  IS INITIAL.
         IF GT_MATNR-LGORT <>  'TM11'.
         SELECT  SINGLE VERPR
           INTO GT_MATNR-VERPR
         FROM MBEW
         WHERE BWKEY = G_WERKS
           AND MATNR = GT_MATNR-MATNR.
          ENDIF.
      ENDIF.
       CLEAR G_VALUE.
       CALL  FUNCTION  'EVAL_FORMULA'  "將字符串運算 直接算出結果
         EXPORTING
          FORMULA = GT_MATNR-ABLAD
         IMPORTING
           VALUE   = G_VALUE.
       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 G_VALUE  IS  NOT INITIAL.
        GT_MATNR-VERPR = GT_MATNR-VERPR * G_VALUE.
      ENDIF.
      G_SUM_VEPRP = G_SUM_VEPRP + GT_MATNR-VERPR * GT_MATNR-BDMNG.

      GT_MATNR-SUM_VERPR = GT_MATNR-VERPR * GT_MATNR-BDMNG.


       SELECT  SINGLE MSEHL
         INTO GT_MATNR-MSEHL
       FROM T006A
       WHERE MSEHI = GT_MATNR-MEINS
         AND SPRAS =  'M'.



       IF GT_MATNR-MATNR  IS  NOT INITIAL.
        GT_NUMBE-NUMBE = G_TABIX.
         CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_OUTPUT'
           EXPORTING
             INPUT  = GT_NUMBE-NUMBE
           IMPORTING
             OUTPUT = GT_NUMBE-NUMBE.
         APPEND GT_NUMBE.
      ENDIF.

       IF GT_MATNR-MATNR  IS  NOT INITIAL.
         CONCATENATE  '' '' GT_MATNR-MATNR  INTO GT_MATNR-MATNR.
      ENDIF.

       CONCATENATE SY-MANDT GT_MATNR-RSNUM GT_MATNR-RSPOS  INTO ZNAME.


       CALL  FUNCTION  'READ_TEXT'
         EXPORTING
           CLIENT                        = SY-MANDT
           ID                            'MATK'
           LANGUAGE                      = SY-LANGU
          NAME                          = ZNAME
          OBJECT                        =  'AUFK'
*         ARCHIVE_HANDLE                = 0
*         LOCAL_CAT                     = ' '
*       IMPORTING
*         HEADER                        =
*         OLD_LINE_COUNTER              =
         TABLES
           LINES                         = TDLINES
        EXCEPTIONS
          ID                            1
          LANGUAGE                      2
         NAME                          =  3
         NOT_FOUND                     =  4
         OBJECT                        =  5
         REFERENCE_CHECK               =  6
         WRONG_ACCESS_TO_ARCHIVE       =  7
          OTHERS                        8
.
       IF SY-SUBRC =  4.

      ENDIF.

       LOOP  AT TDLINES.
         CONCATENATE GT_MATNR-ZLINE TDLINES-TDLINE  INTO GT_MATNR-ZLINE.
      ENDLOOP.



       MODIFY GT_MATNR.
    ENDLOOP.
     READ  TABLE GT_MATNR  INDEX  1.
     IF SY-SUBRC =  0.
       IF GT_MATNR-MATNR  IS  NOT INITIAL.
         DESCRIBE  TABLE GT_MATNR  LINES ROW_COUNT.
      ENDIF.
    ENDIF.
    COL_COUNT =  4.
    ROW_COUNT = ROW_COUNT +  1.


*---------- 調用EXCEL VBA --->新增行
     CALL  METHOD GR_DOCUMENT->EXECUTE_MACRO
       EXPORTING
        MACRO_STRING =  'THISWORKBOOK.ADDROWS'
        PARAM1       = ROW_COUNT
        PARAM2       = G_ADDROW
        PARAM_COUNT  =  2.

    G_ADDROW2 = G_ADDROW.
     CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
       EXPORTING
        NAME     =  'B_H'
        NO_FLUSH =  'X'
        TOP      = G_ADDROW2
         LEFT     2
         ROWS     = ROW_COUNT
        COLUMNS  =  7.

     CLEAR GS_RANGE.
     CLEAR GT_RANGES[].
    GS_RANGE-NAME =  'B_H'.
    GS_RANGE-ROWS = ROW_COUNT.
    GS_RANGE-COLUMNS =  7.
    GS_RANGE-CODE =  7.
     APPEND GS_RANGE  TO GT_RANGES.
     READ  TABLE GT_MATNR  INDEX  1.
     IF SY-SUBRC =  0.
       IF GT_MATNR-MATNR  IS  NOT INITIAL.
         CLEAR GT_CONTENTS[].
        WRITE_CONTENT_CELL  1  GT_APLZL-LTXA1.
        WRITE_CONTENT_CELL  2   ''.
        WRITE_CONTENT_CELL  3   ''.
        WRITE_CONTENT_CELL  4   ''.
        WRITE_CONTENT_CELL  5   ''.
        WRITE_CONTENT_CELL  6   ''.
        WRITE_CONTENT_CELL  7   ''.
         CLEAR ROW_INDEX.
        ROW_INDEX =  2.


         LOOP  AT GT_MATNR.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-MATNR.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-MAKTX.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-MSEHL.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-BDMNG.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-VERPR.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-SUM_VERPR.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-ZLINE.

          ROW_INDEX = ROW_INDEX +  1.
        ENDLOOP.
      ELSE.
        CLEAR:G_TAX, GT_CONTENTS[].

        G_TAX = GT_MATNR-BDMNG * G_SUM_VEPRP /  100.
        G_SUM_MONEY = G_SUM_MONEY + G_TAX.
         LOOP  AT GT_MATNR.
           IF GT_MATNR-MEINS =  '%'.
            GT_MATNR-MSEHL =  '式'.
            GT_MATNR-BDMNG =  1.
          ENDIF.
           MODIFY GT_MATNR.
        ENDLOOP.
        WRITE_CONTENT_CELL  1  GT_APLZL-LTXA1.
        WRITE_CONTENT_CELL  2   ''.
        WRITE_CONTENT_CELL  3  GT_MATNR-MSEHL.
        WRITE_CONTENT_CELL  4  GT_MATNR-BDMNG.
        WRITE_CONTENT_CELL  5  G_TAX.
        WRITE_CONTENT_CELL  6  G_TAX.
        WRITE_CONTENT_CELL  7   ''.
         CLEAR ROW_INDEX.
        ROW_INDEX =  1.

      ENDIF.
    ELSE.
       CLEAR GT_CONTENTS[].
      WRITE_CONTENT_CELL  1  GT_APLZL-LTXA1.
      WRITE_CONTENT_CELL  2   ''.
      WRITE_CONTENT_CELL  3   ''.
      WRITE_CONTENT_CELL  4   ''.
      WRITE_CONTENT_CELL  5   ''.
      WRITE_CONTENT_CELL  6   ''.
      WRITE_CONTENT_CELL  7   ''.
       CLEAR ROW_INDEX.
      ROW_INDEX =  2.

    ENDIF.



     CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
       EXPORTING
         RANGES   = GT_RANGES
        CONTENTS = GT_CONTENTS
        NO_FLUSH =  'X'.
    CLEAR:GT_CONTENTS[].

    G_ADDROW = G_ADDROW + ROW_COUNT.
  ENDLOOP.


  CLEAR:ROW_COUNT.
  CLEAR:GT_NUMBE-NUMBE.
   DO  TIMES.

    G_SIN_NUM = G_SIN_NUM +  1.
     PERFORM CASENUM.
     APPEND GT_NUMBE.
    CLEAR:GT_NUMBE-NUMBE.
  ENDDO.
   DESCRIBE  TABLE GT_NUMBE  LINES  ROW_COUNT.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'A9_LAST'
      NO_FLUSH =  'X'
      TOP      =  9
       LEFT     1
       ROWS     = ROW_COUNT
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'A9_LAST'.
  GS_RANGE-ROWS = ROW_COUNT.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.


   CLEAR ROW_INDEX.

   LOOP  AT GT_NUMBE.
    WRITE_CONTENT_CELL SY-TABIX  GT_NUMBE-NUMBE.
  ENDLOOP.
   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.


*---------工程總金額 BEGIN

  G_SUM_MONEY = G_SUM_VEPRP + G_SUM_MONEY.
  CLEAR:GT_CONTENTS[].

  G_GCZJE = G_SUM_MONEY.
   CONCATENATE  '工程金額合計:' G_GCZJE  INTO G_GCZJE.

  ROW_COUNT =  + ROW_COUNT +  1.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'GCZJE'
      NO_FLUSH =  'X'
      TOP      = ROW_COUNT
       LEFT     2
       ROWS     1
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'GCZJE'.
  GS_RANGE-ROWS =  1.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.


   CLEAR ROW_INDEX.

  WRITE_CONTENT_CELL  G_GCZJE.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.
*---------工程總金額 END
*----------工程總金額 大寫 BEGIN
  CLEAR:GT_CONTENTS[].

   PERFORM S2B  USING G_SUM_MONEY G_GCZJE_BIG.
   CONCATENATE  '工程金額合計(大寫):' G_GCZJE_BIG  INTO G_GCZJE_BIG.

  ROW_COUNT = ROW_COUNT +  1.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'GCZJE_BIG'
      NO_FLUSH =  'X'
      TOP      = ROW_COUNT
       LEFT     2
       ROWS     1
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'GCZJE_BIG'.
  GS_RANGE-ROWS =  1.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.


   CLEAR ROW_INDEX.

  WRITE_CONTENT_CELL  G_GCZJE_BIG.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.
*----------工程總金額 大寫 END
*----------功能性要求 BEGIN
  CLEAR:GT_CONTENTS[].
   READ  TABLE GT_APLZL  WITH  KEY ANLZU =  1.
   IF SY-SUBRC =  .
    CLEAR:ZNAME,TDLINES,TDLINES[],G_GNXYQ.
     CONCATENATE SY-MANDT GT_APLZL-AUFPL GT_APLZL-APLZL  INTO ZNAME.


     CALL  FUNCTION  'READ_TEXT'
       EXPORTING
         CLIENT                        = SY-MANDT
         ID                            'AVOT'
         LANGUAGE                      = SY-LANGU
        NAME                          = ZNAME
        OBJECT                        =  'AUFK'
*         ARCHIVE_HANDLE                = 0
*         LOCAL_CAT                     = ' '
*       IMPORTING
*         HEADER                        =
*         OLD_LINE_COUNTER              =
       TABLES
         LINES                         = TDLINES
      EXCEPTIONS
        ID                            1
        LANGUAGE                      2
       NAME                          =  3
       NOT_FOUND                     =  4
       OBJECT                        =  5
       REFERENCE_CHECK               =  6
       WRONG_ACCESS_TO_ARCHIVE       =  7
        OTHERS                        8
.
     IF SY-SUBRC =  4.

    ENDIF.

     READ  TABLE TDLINES  INDEX  2.
     IF SY-SUBRC =  0.
       CONCATENATE  '1.功能性要求:' TDLINES-TDLINE  INTO G_GNXYQ.
    ENDIF.
  ELSE.

  ENDIF.
  ROW_COUNT = ROW_COUNT +  5.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'GNXYQ'
      NO_FLUSH =  'X'
      TOP      = ROW_COUNT
       LEFT     2
       ROWS     1
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'GNXYQ'.
  GS_RANGE-ROWS =  1.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.


   CLEAR ROW_INDEX.

  WRITE_CONTENT_CELL  G_GNXYQ.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.
*----------功能性要求 END

*----------保固年限  BEGIN
  CLEAR:GT_CONTENTS[].
   READ  TABLE GT_APLZL  WITH   KEY ANLZU =  2.
   IF SY-SUBRC =  0.
    CLEAR:GT_MATNR[].
     SELECT T1~MATNR MEINS BDMNG T2~APLZL T1~RSNUM T1~RSPOS
       INTO CORRESPONDING  FIELDS  OF  TABLE GT_MATNR
     FROM RESB  AS T1
       JOIN AFVC  AS T2
     ON T1~AUFPL = T2~AUFPL
       AND T1~APLZL = T2~APLZL
     JOIN CAUFV  AS T3
       ON T1~AUFPL = T3~AUFPL
     WHERE T3~AUFNR = P_AUFNR
       AND T2~APLZL = GT_APLZL-APLZL.
     LOOP  AT GT_MATNR.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX
       FROM ZEPTM003
       WHERE MATNR = GT_MATNR-MATNR.
       IF GT_MATNR-MAKTX  IS INITIAL.
         SELECT  SINGLE MAKTX
           INTO GT_MATNR-MAKTX
         FROM MAKT
         WHERE MATNR = GT_MATNR-MATNR.
       ELSE.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX+0(40)
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
      ENDIF.
       MODIFY GT_MATNR.
    ENDLOOP.
  ENDIF.
   READ  TABLE GT_MATNR  INDEX  1.
   IF SY-SUBRC =  0.
    G_BGNX = GT_MATNR-BDMNG .
     SPLIT G_BGNX  AT  '.'  INTO G_BGNX G_BGNX2.

     CONCATENATE  '1.本工程采责任施工,业主无书面变更说明不得追加,验收合格后保固(' G_BGNX
                 ')年。'  INTO G_BGNX.
  ENDIF.
  ROW_COUNT =  ROW_COUNT +  2.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'BGNX'
      NO_FLUSH =  'X'
      TOP      = ROW_COUNT
       LEFT     2
       ROWS     1
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'BGNX'.
  GS_RANGE-ROWS =  1.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.


   CLEAR ROW_INDEX.

  WRITE_CONTENT_CELL  G_BGNX.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.

*----------保固年限  BEGIN


ENDFORM.                     " WRITE_DATA_TO_EXCEL
*&---------------------------------------------------------------------*
*&      FORM  WRITE_DATA_TO_EXCEL_GT_30WAN
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM WRITE_DATA_TO_EXCEL_GT_30WAN .
  DATA: COL_COUNT  TYPE  VALUE 0,
       ROW_COUNT  TYPE  VALUE 0,
       ROW_COUNT_30  TYPE  VALUE 0,
       L_FLAG  TYPE C.
  DATA:L_CTEXT(20).
  CLEAR:G_NACHN,G_VORNA,G_WERKS,G_A1,G_A2,G_A3,G_A4,G_A5,G_A6,G_OBJNR,G_TABIX.
   SELECT  SINGLE NACHN VORNA
     INTO (G_NACHN,G_VORNA)
   FROM PA0002
   JOIN CAUFV
   ON PA0002~PERNR = CAUFV~ERNAM
   WHERE CAUFV~AUFNR = P_AUFNR.

   IF G_NACHN  IS  NOT  INITIAL  AND G_VORNA  IS  NOT INITIAL.
     CONCATENATE  '業主聯絡人:' G_NACHN G_VORNA  INTO G_A5.
  ELSE.
     SELECT  SINGLE T3~NAME_LAST
       INTO G_A5
     FROM CAUFV  AS T1
     JOIN USR21  AS T2
       ON T1~ERNAM = T2~BNAME
     JOIN ADRP  AS T3
       ON T2~PERSNUMBER = T3~PERSNUMBER
     WHERE AUFNR = P_AUFNR.
     CONCATENATE  '業主聯絡人:' G_A5  INTO G_A5.
  ENDIF.

   SELECT  SINGLE KTEXT
     INTO G_A4
   FROM CAUFV
   WHERE AUFNR = P_AUFNR.
   CONCATENATE  '工程名稱:' G_A4  INTO G_A4.

   SELECT  SINGLE KTEXT
     INTO G_A2
   FROM CAUFV
   WHERE AUFNR = P_AUFNR.
   CONCATENATE  '(' G_A2  ')標準標單或標單首頁'  INTO G_A2.

   SELECT  SINGLE BUTXT
     INTO G_A1
   FROM CAUFV
   JOIN T001
   ON CAUFV~BUKRS = T001~BUKRS
   WHERE AUFNR = P_AUFNR.

   SELECT  SINGLE WERKS
     INTO G_WERKS
   FROM CAUFV
   WHERE AUFNR = P_AUFNR.
   IF G_WERKS =  'C301'  OR G_WERKS =  'C303'  OR G_WERKS =  'C304'  OR G_WERKS =  'C305'  OR G_WERKS =  'C306'  OR G_WERKS =  'C307'.
     CONCATENATE  '業主名稱:' G_A1  '(團結廠)'  INTO G_A3.
   ELSEIF G_WERKS =  'C302'  OR G_WERKS =  'C308'  OR G_WERKS =  'C309'  OR G_WERKS =  'C310'  OR G_WERKS =  'C311'  OR G_WERKS =  'C312'  OR G_WERKS =  'C313'.
     CONCATENATE  '業主名稱:' G_A1  '(芙蓉廠)'  INTO G_A3.
   ELSEIF G_WERKS =  'C331'  OR G_WERKS =  'C332'  OR G_WERKS =  'C333'.
     CONCATENATE  '業主名稱:' G_A1   INTO G_A3.
  ENDIF.

   CONCATENATE  'OR' P_AUFNR  INTO G_OBJNR.

   SELECT  SINGLE TPLNR
     INTO G_A6
   FROM MCIPMIS
   WHERE OBJNR = G_OBJNR.

   CONCATENATE  '施工地點:' G_A6  INTO G_A6.

   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'A1_A6'
      NO_FLUSH =  'X'
      TOP      =  2
       LEFT     1
       ROWS     4
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'A1_A6'.
  GS_RANGE-ROWS =  4.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.

  CLEAR:GT_CONTENTS[].
   " WRITE_CONTENT_CELL 1 1  ''.
   " WRITE_CONTENT_CELL 2 1  G_A2.
  WRITE_CONTENT_CELL  1  G_A3.
  WRITE_CONTENT_CELL  1  G_A4.
  WRITE_CONTENT_CELL  1  G_A5.
  WRITE_CONTENT_CELL  1  G_A6.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.


   LOOP  AT GT_APLZL  WHERE ANLZU <>  1
                      AND ANLZU <>  2.
     SPLIT GT_APLZL-LTXA1  AT  '-'  INTO GT_APLZL2-LTXA1 L_CTEXT.
    GT_APLZL2-APLZL = GT_APLZL-APLZL.
     APPEND GT_APLZL2.
  ENDLOOP.
   SORT GT_APLZL  BY LTXA1.
   SORT GT_APLZL2  BY LTXA1 APLZL.
  CLEAR:G_LTXA1,G_APLZL.
   LOOP  AT GT_APLZL2.
     IF GT_APLZL2-LTXA1 = G_LTXA1.
      GT_APLZL2-APLZL = G_APLZL.
    ENDIF.
    G_LTXA1 = GT_APLZL2-LTXA1.
    G_APLZL = GT_APLZL2-APLZL.
     MODIFY GT_APLZL2.
  ENDLOOP.
   DELETE  ADJACENT  DUPLICATES  FROM GT_APLZL2 .
   SORT GT_APLZL  BY APLZL.
   SORT GT_APLZL2  BY APLZL.
   DESCRIBE  TABLE GT_APLZL2  LINES  ROW_COUNT_30.

*---------- 調用EXCEL VBA --->新增行
*---------- 後面才能計算合計價格,先插入幾行空著,算出價格后再把這幾行貼上去

  DATA:LV_I  TYPE I.
  DATA:LV_J  TYPE I.
  DATA: L_VEPRP  LIKE MBEW-VERPR.
   CALL  METHOD GR_DOCUMENT->EXECUTE_MACRO
     EXPORTING
      MACRO_STRING =  'THISWORKBOOK.ADDROWS'
      PARAM1       = ROW_COUNT_30
      PARAM2       =  9
      PARAM_COUNT  =  2.


  G_ADDROW2 = ROW_COUNT_30 +  30.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'A_H_LAST'
      NO_FLUSH =  'X'
      TOP      = G_ADDROW2
       LEFT     1
       ROWS     = ROW_COUNT_30
      COLUMNS  =  8.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'A_H_LAST'.
  GS_RANGE-ROWS = ROW_COUNT_30.
  GS_RANGE-COLUMNS =  8.
  GS_RANGE-CODE =  8.
   APPEND GS_RANGE  TO GT_RANGES.

  CLEAR:GT_CONTENTS[].
  ROW_INDEX =  1.
   LOOP  AT GT_APLZL2.
    CLEAR:L_VEPRP,G_GCZJE_BIG.
    L_VEPRP = SY-TABIX.
     PERFORM S2B  USING L_VEPRP G_GCZJE_BIG.

    LV_I = STRLEN( G_GCZJE_BIG ).
    LV_I = LV_I -  2.
    G_GCZJE_BIG = G_GCZJE_BIG+0(LV_I).

    WRITE_CONTENT_CELL ROW_INDEX  G_GCZJE_BIG.
    WRITE_CONTENT_CELL ROW_INDEX  '/'.
    WRITE_CONTENT_CELL ROW_INDEX  GT_APLZL2-LTXA1.
    WRITE_CONTENT_CELL ROW_INDEX  ''.
    WRITE_CONTENT_CELL ROW_INDEX  ''.
    WRITE_CONTENT_CELL ROW_INDEX  ''.
    WRITE_CONTENT_CELL ROW_INDEX  ''.
    WRITE_CONTENT_CELL ROW_INDEX  ''.

    ROW_INDEX = ROW_INDEX +  1.
  ENDLOOP.
  CLEAR:ROW_INDEX.



   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS
      NO_FLUSH =  'X'.


*----------功能性要求 BEGIN
  CLEAR:GT_CONTENTS[].
   READ  TABLE GT_APLZL  WITH  KEY ANLZU =  1.
   IF SY-SUBRC =  .
    CLEAR:ZNAME,TDLINES,TDLINES[],G_GNXYQ.
     CONCATENATE SY-MANDT GT_APLZL-AUFPL GT_APLZL-APLZL  INTO ZNAME.


     CALL  FUNCTION  'READ_TEXT'
       EXPORTING
         CLIENT                        = SY-MANDT
         ID                            'AVOT'
         LANGUAGE                      = SY-LANGU
        NAME                          = ZNAME
        OBJECT                        =  'AUFK'
*         ARCHIVE_HANDLE                = 0
*         LOCAL_CAT                     = ' '
*       IMPORTING
*         HEADER                        =
*         OLD_LINE_COUNTER              =
       TABLES
         LINES                         = TDLINES
      EXCEPTIONS
        ID                            1
        LANGUAGE                      2
       NAME                          =  3
       NOT_FOUND                     =  4
       OBJECT                        =  5
       REFERENCE_CHECK               =  6
       WRONG_ACCESS_TO_ARCHIVE       =  7
        OTHERS                        8
.
     IF SY-SUBRC =  4.

    ENDIF.

     READ  TABLE TDLINES  INDEX  2.
     IF SY-SUBRC =  0.
       CONCATENATE  '1.功能性要求:' TDLINES-TDLINE  INTO G_GNXYQ.
    ENDIF.
  ELSE.

  ENDIF.
  ROW_COUNT_30 = ROW_COUNT_30 +  14.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'GNXYQ'
      NO_FLUSH =  'X'
      TOP      = ROW_COUNT_30
       LEFT     2
       ROWS     1
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'GNXYQ'.
  GS_RANGE-ROWS =  1.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.


   CLEAR ROW_INDEX.

  WRITE_CONTENT_CELL  G_GNXYQ.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.
*----------功能性要求 END

*----------保固年限  BEGIN
  CLEAR:GT_CONTENTS[].
   READ  TABLE GT_APLZL  WITH   KEY ANLZU =  2.
   IF SY-SUBRC =  0.
    CLEAR:GT_MATNR[].
     SELECT T1~MATNR  MEINS BDMNG T2~APLZL T1~RSNUM T1~RSPOS
       INTO CORRESPONDING  FIELDS  OF  TABLE GT_MATNR
     FROM RESB  AS T1
       JOIN AFVC  AS T2
     ON T1~AUFPL = T2~AUFPL
       AND T1~APLZL = T2~APLZL
     JOIN CAUFV  AS T3
       ON T1~AUFPL = T3~AUFPL
     WHERE T3~AUFNR = P_AUFNR
       AND T2~APLZL = GT_APLZL-APLZL.
  ENDIF.
   LOOP  AT GT_MATNR.
     SELECT  SINGLE MAKTX
       INTO GT_MATNR-MAKTX
     FROM ZEPTM003
     WHERE MATNR = GT_MATNR-MATNR.
     IF GT_MATNR-MAKTX  IS INITIAL.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
     ELSE.
        SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX+0(40)
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
    ENDIF.
     MODIFY GT_MATNR.
  ENDLOOP.
   READ  TABLE GT_MATNR  INDEX  1.
   IF SY-SUBRC =  0.
    G_BGNX = GT_MATNR-BDMNG .
     SPLIT G_BGNX  AT  '.'  INTO G_BGNX G_BGNX2.

     CONCATENATE  '1.本工程采责任施工,业主无书面变更说明不得追加,验收合格后保固(' G_BGNX
                 ')年。'  INTO G_BGNX.
  ENDIF.
  ROW_COUNT_30 =  ROW_COUNT_30 +  2.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'BGNX'
      NO_FLUSH =  'X'
      TOP      = ROW_COUNT_30
       LEFT     2
       ROWS     1
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'BGNX'.
  GS_RANGE-ROWS =  1.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.


   CLEAR ROW_INDEX.

  WRITE_CONTENT_CELL  G_BGNX.

   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS.

*----------保固年限  END

*----------標單頁尾 明細資料 BEGIN
  ROW_COUNT_30 = ROW_COUNT_30 +  14.
   LOOP  AT GT_APLZL  WHERE ANLZU <>  1
                      AND ANLZU <>  2.
     SELECT T1~MATNR MEINS BDMNG T2~APLZL T1~RSNUM T1~RSPOS T1~GPREIS  AS VERPR T1~ABLAD T1~LGORT
       APPENDING CORRESPONDING  FIELDS  OF  TABLE GT_MATNR
     FROM RESB  AS T1
       JOIN AFVC  AS T2
     ON T1~AUFPL = T2~AUFPL
       AND T1~APLZL = T2~APLZL
     JOIN CAUFV  AS T3
       ON T1~AUFPL = T3~AUFPL
     WHERE T3~AUFNR = P_AUFNR
       AND T2~APLZL = GT_APLZL-APLZL.

  ENDLOOP.
   LOOP  AT GT_MATNR.
     SELECT  SINGLE MAKTX
       INTO GT_MATNR-MAKTX
     FROM ZEPTM003
     WHERE MATNR = GT_MATNR-MATNR.
     IF GT_MATNR-MAKTX  IS INITIAL.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
     ELSE.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX+0(40)
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
    ENDIF.
     MODIFY GT_MATNR.
  ENDLOOP.
  CLEAR:G_SUM_VEPRP.
   LOOP  AT GT_MATNR.
     IF GT_MATNR-VERPR  IS INITIAL.
       IF GT_MATNR-LGORT <>  'TM11'.
       SELECT  SINGLE VERPR
         INTO GT_MATNR-VERPR
       FROM MBEW
       WHERE BWKEY = G_WERKS
         AND MATNR = GT_MATNR-MATNR.
        ENDIF.
    ENDIF.

  ENDLOOP.
   LOOP  AT GT_APLZL.
     SPLIT GT_APLZL-LTXA1  AT  '-'  INTO GT_APLZL-LTXA2 L_CTEXT.
    CLEAR:G_IND,G_ILEN.
    GT_APLZL-NUMBE = SY-TABIX.
     CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_OUTPUT'
       EXPORTING
         INPUT  = GT_APLZL-NUMBE
       IMPORTING
         OUTPUT = GT_APLZL-NUMBE.
    G_ILEN = STRLEN( GT_APLZL-NUMBE ).

    CLEAR:GT_NUMBE-NUMBE.
     DO G_ILEN TIMES.
      G_SIN_NUM = GT_APLZL-NUMBE+G_IND(1).
       PERFORM CASENUM.
      G_IND = G_IND +  1.
    ENDDO.
    GT_APLZL-NUMBE = GT_NUMBE-NUMBE.
     MODIFY GT_APLZL.
  ENDLOOP.
  G_ADDROW2 = ROW_COUNT_30 +  1.
   LOOP  AT GT_APLZL  WHERE ANLZU <>  1
                       AND ANLZU <>  2.
    CLEAR:ROW_COUNT,COL_COUNT.

    CLEAR:GT_MATNR,GT_MATNR[].
     SELECT T1~MATNR MEINS BDMNG T2~APLZL T1~RSNUM T1~RSPOS T1~GPREIS  AS VERPR T1~ABLAD T1~LGORT
       INTO CORRESPONDING  FIELDS  OF  TABLE GT_MATNR
     FROM RESB  AS T1
       JOIN AFVC  AS T2
     ON T1~AUFPL = T2~AUFPL
       AND T1~APLZL = T2~APLZL
     JOIN CAUFV  AS T3
       ON T1~AUFPL = T3~AUFPL
     WHERE T3~AUFNR = P_AUFNR
       AND T2~APLZL = GT_APLZL-APLZL.
     PERFORM SET_NO.
     LOOP  AT GT_MATNR .

      CLEAR:ZNAME,TDLINES,TDLINES[],G_TABIX.
      G_TABIX = SY-TABIX.
       SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX
       FROM ZEPTM003
       WHERE MATNR = GT_MATNR-MATNR.

       IF GT_MATNR-MAKTX  IS INITIAL.
         SELECT  SINGLE MAKTX
           INTO GT_MATNR-MAKTX
         FROM MAKT
         WHERE MATNR = GT_MATNR-MATNR.
        ELSE.
        SELECT  SINGLE MAKTX
         INTO GT_MATNR-MAKTX+0(40)
       FROM MAKT
       WHERE MATNR = GT_MATNR-MATNR.
      ENDIF.
       IF GT_MATNR-VERPR  IS INITIAL.
         IF GT_MATNR-LGORT <>  'TM11'.
         SELECT  SINGLE VERPR
           INTO GT_MATNR-VERPR
         FROM MBEW
         WHERE BWKEY = G_WERKS
           AND MATNR = GT_MATNR-MATNR.
          ENDIF.
      ENDIF.
       CLEAR G_VALUE.
       CALL  FUNCTION  'EVAL_FORMULA'  "將字符串運算 直接算出結果
         EXPORTING
          FORMULA = GT_MATNR-ABLAD
         IMPORTING
           VALUE   = G_VALUE.
       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 G_VALUE  IS  NOT INITIAL.
        GT_MATNR-VERPR = GT_MATNR-VERPR * G_VALUE.
      ENDIF.
      G_SUM_VEPRP = G_SUM_VEPRP + GT_MATNR-VERPR * GT_MATNR-BDMNG.

      GT_MATNR-SUM_VERPR = GT_MATNR-VERPR * GT_MATNR-BDMNG.
      GT_APLZL-SUM_VERPR = GT_APLZL-SUM_VERPR + GT_MATNR-SUM_VERPR.  " 計算每一個大類的總價格 -->有物料編碼
       SELECT  SINGLE MSEHL
         INTO GT_MATNR-MSEHL
       FROM T006A
       WHERE MSEHI = GT_MATNR-MEINS
         AND SPRAS =  'M'.


       IF GT_MATNR-MATNR  IS  NOT INITIAL.
        GT_NUMBE-NUMBE = G_TABIX.
         CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_OUTPUT'
           EXPORTING
             INPUT  = GT_NUMBE-NUMBE
           IMPORTING
             OUTPUT = GT_NUMBE-NUMBE.
         APPEND GT_NUMBE.
      ENDIF.

       IF GT_MATNR-MATNR  IS  NOT INITIAL.
         CONCATENATE  '' '' GT_MATNR-MATNR  INTO GT_MATNR-MATNR.
      ENDIF.

       CONCATENATE SY-MANDT GT_MATNR-RSNUM GT_MATNR-RSPOS  INTO ZNAME.


       CALL  FUNCTION  'READ_TEXT'
         EXPORTING
           CLIENT                  = SY-MANDT
           ID                      'MATK'
           LANGUAGE                = SY-LANGU
          NAME                    = ZNAME
          OBJECT                  =  'AUFK'
         TABLES
           LINES                   = TDLINES
         EXCEPTIONS
           ID                      1
           LANGUAGE                2
          NAME                    =  3
          NOT_FOUND               =  4
          OBJECT                  =  5
          REFERENCE_CHECK         =  6
          WRONG_ACCESS_TO_ARCHIVE =  7
           OTHERS                  8.
       IF SY-SUBRC =  4.

      ENDIF.

       LOOP  AT TDLINES.
         CONCATENATE GT_MATNR-ZLINE TDLINES-TDLINE  INTO GT_MATNR-ZLINE.
      ENDLOOP.

       MODIFY GT_MATNR.
    ENDLOOP.


     READ  TABLE GT_MATNR  INDEX  1.
     IF SY-SUBRC =  0.
       IF GT_MATNR-MATNR  IS  NOT INITIAL.
         DESCRIBE  TABLE GT_MATNR  LINES ROW_COUNT.
      ENDIF.
    ENDIF.


    ROW_COUNT = ROW_COUNT +  1.
     CALL  METHOD GR_DOCUMENT->EXECUTE_MACRO
       EXPORTING
        MACRO_STRING =  'THISWORKBOOK.ADDROWS'
        PARAM1       = ROW_COUNT
        PARAM2       = G_ADDROW2
        PARAM_COUNT  =  2.


     CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
       EXPORTING
        NAME     =  'B_H'
        NO_FLUSH =  'X'
        TOP      = G_ADDROW2
         LEFT     1
         ROWS     = ROW_COUNT
        COLUMNS  =  8.

     CLEAR GS_RANGE.
     CLEAR GT_RANGES[].
    GS_RANGE-NAME =  'B_H'.
    GS_RANGE-ROWS = ROW_COUNT.
    GS_RANGE-COLUMNS =  8.
    GS_RANGE-CODE =  8.
     APPEND GS_RANGE  TO GT_RANGES.
     READ  TABLE GT_MATNR  INDEX  1.
     IF SY-SUBRC =  0.
       IF GT_MATNR-MATNR  IS  NOT INITIAL.
         CLEAR GT_CONTENTS[].
        WRITE_CONTENT_CELL  ''. "GT_APLZL-NUMBE.
        WRITE_CONTENT_CELL  2  GT_APLZL-LTXA1.
        WRITE_CONTENT_CELL  3   ''.
        WRITE_CONTENT_CELL  4   ''.
        WRITE_CONTENT_CELL  5   ''.
        WRITE_CONTENT_CELL  6   ''.
        WRITE_CONTENT_CELL  7   ''.
        WRITE_CONTENT_CELL  8   ''.
         CLEAR ROW_INDEX.
        ROW_INDEX =  2.


         LOOP  AT GT_MATNR.
          WRITE_CONTENT_CELL ROW_INDEX  SY-TABIX.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-MATNR.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-MAKTX.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-MSEHL.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-BDMNG.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-VERPR.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-SUM_VERPR.
          WRITE_CONTENT_CELL ROW_INDEX  GT_MATNR-ZLINE.

          ROW_INDEX = ROW_INDEX +  1.
        ENDLOOP.
      ELSE.
        CLEAR:G_TAX, GT_CONTENTS[].

        G_TAX = GT_MATNR-BDMNG * G_SUM_VEPRP /  100.
        G_SUM_MONEY = G_SUM_MONEY + G_TAX.
         LOOP  AT GT_MATNR.
           IF GT_MATNR-MEINS =  '%'.
            GT_MATNR-MSEHL =  '式'.
            GT_MATNR-BDMNG =  1.
          ENDIF.
           MODIFY GT_MATNR.
        ENDLOOP.
        WRITE_CONTENT_CELL  1   ''. "GT_APLZL-NUMBE.
        WRITE_CONTENT_CELL  2  GT_APLZL-LTXA1.
        WRITE_CONTENT_CELL  3   ''.
        WRITE_CONTENT_CELL  4  GT_MATNR-MSEHL.
        WRITE_CONTENT_CELL  5  GT_MATNR-BDMNG.
        WRITE_CONTENT_CELL  6  G_TAX.
        WRITE_CONTENT_CELL  7  G_TAX.
        WRITE_CONTENT_CELL  8   ''.
         CLEAR ROW_INDEX.
        ROW_INDEX =  1.
        GT_APLZL-SUM_VERPR = G_TAX.  " 計算每一個大類的總價格 -->無物料編碼
      ENDIF.
    ELSE.
       CLEAR GT_CONTENTS[].
      WRITE_CONTENT_CELL  1   ''. "GT_APLZL-NUMBE.
      WRITE_CONTENT_CELL  2  GT_APLZL-LTXA1.
      WRITE_CONTENT_CELL  3   ''.
      WRITE_CONTENT_CELL  4   ''.
      WRITE_CONTENT_CELL  5   ''.
      WRITE_CONTENT_CELL  6   ''.
      WRITE_CONTENT_CELL  7   ''.
      WRITE_CONTENT_CELL  8   ''.
       CLEAR ROW_INDEX.
      ROW_INDEX =  2.


    ENDIF.



     CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
       EXPORTING
         RANGES   = GT_RANGES
        CONTENTS = GT_CONTENTS
        NO_FLUSH =  'X'.



     MODIFY GT_APLZL.
    CLEAR:L_FLAG.

     AT  END  OF LTXA2.
      G_ADDROW2 = G_ADDROW2 + ROW_COUNT +  1.
      L_FLAG =  'X'.
    ENDAT.
     IF L_FLAG <>  'X'.
      G_ADDROW2 = G_ADDROW2 + ROW_COUNT.
    ENDIF.

  ENDLOOP.
*----------標單頁尾 明細資料 END
*----------標單表頭 大項 BEGIN
   LOOP  AT GT_APLZL2 .
     LOOP  AT GT_APLZL  WHERE LTXA2 = GT_APLZL2-LTXA1.
      GT_APLZL2-SUM_VERPR = GT_APLZL2-SUM_VERPR + GT_APLZL-SUM_VERPR.
    ENDLOOP.
     MODIFY GT_APLZL2.
  ENDLOOP.
  CLEAR: ROW_COUNT_30.
   DESCRIBE  TABLE GT_APLZL2  LINES ROW_COUNT_30.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'A_H'
      NO_FLUSH =  'X'
      TOP      =  9
       LEFT     1
       ROWS     = ROW_COUNT_30
      COLUMNS  =  8.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'A_H'.
  GS_RANGE-ROWS = ROW_COUNT_30.
  GS_RANGE-COLUMNS =  8.
  GS_RANGE-CODE =  8.
   APPEND GS_RANGE  TO GT_RANGES.



  CLEAR:GT_CONTENTS[].
  ROW_INDEX =  1.
   LOOP  AT GT_APLZL2.
    CLEAR:L_VEPRP,G_GCZJE_BIG.
    L_VEPRP = SY-TABIX.
     PERFORM S2B  USING L_VEPRP G_GCZJE_BIG.

    LV_I = STRLEN( G_GCZJE_BIG ).
    LV_I = LV_I -  2.
    G_GCZJE_BIG = G_GCZJE_BIG+0(LV_I).

    WRITE_CONTENT_CELL ROW_INDEX  G_GCZJE_BIG.
    WRITE_CONTENT_CELL ROW_INDEX  '/'.
    WRITE_CONTENT_CELL ROW_INDEX  GT_APLZL2-LTXA1.
    WRITE_CONTENT_CELL ROW_INDEX  '式'.
    WRITE_CONTENT_CELL ROW_INDEX  '1'.
    WRITE_CONTENT_CELL ROW_INDEX  GT_APLZL2-SUM_VERPR.
    WRITE_CONTENT_CELL ROW_INDEX  GT_APLZL2-SUM_VERPR.
    WRITE_CONTENT_CELL ROW_INDEX  ''.

    ROW_INDEX = ROW_INDEX +  1.
  ENDLOOP.
  CLEAR:ROW_INDEX.



   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS
      NO_FLUSH =  'X'.
*----------標單表頭 大項 END
*----------標單 工程金額合計(RMB) BEGIN
  DATA:L_SUM_VERPR  LIKE MBEW-VERPR,
       L_TOP_GCZJE  TYPE I.
  CLEAR:L_SUM_VERPR.
   LOOP  AT GT_APLZL2 .
    L_SUM_VERPR = L_SUM_VERPR + GT_APLZL2-SUM_VERPR.
  ENDLOOP.
  L_TOP_GCZJE =  + ROW_COUNT_30.
   CALL  METHOD GR_SPREADSHEET->INSERT_RANGE_DIM
     EXPORTING
      NAME     =  'GCZJE'
      NO_FLUSH =  'X'
      TOP      = L_TOP_GCZJE
       LEFT     3
       ROWS     1
      COLUMNS  =  1.

   CLEAR GS_RANGE.
   CLEAR GT_RANGES[].
  GS_RANGE-NAME =  'GCZJE'.
  GS_RANGE-ROWS =  1.
  GS_RANGE-COLUMNS =  1.
  GS_RANGE-CODE =  1.
   APPEND GS_RANGE  TO GT_RANGES.



  CLEAR:GT_CONTENTS[].
  ROW_INDEX =  1.

  WRITE_CONTENT_CELL  L_SUM_VERPR.

  CLEAR:ROW_INDEX.



   CALL  METHOD GR_SPREADSHEET->SET_RANGES_DATA
     EXPORTING
       RANGES   = GT_RANGES
      CONTENTS = GT_CONTENTS
      NO_FLUSH =  'X'.
*----------標單 工程金額合計(RMB) END

ENDFORM.                     " WRITE_DATA_TO_EXCEL_GT_30WAN

*&---------------------------------------------------------------------*
*&      FORM  SET_NO
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM SET_NO .

  CLEAR:G_IND,G_ILEN.
   CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_OUTPUT'
     EXPORTING
       INPUT  = GT_APLZL-APLZL
     IMPORTING
       OUTPUT = GT_APLZL-APLZL.

  G_ILEN = STRLEN( GT_APLZL-APLZL ).

  CLEAR:GT_NUMBE-NUMBE.
   DO G_ILEN TIMES.
    G_SIN_NUM = GT_APLZL-APLZL+G_IND(1).
     PERFORM CASENUM.

    G_IND = G_IND +  1.
  ENDDO.
   APPEND GT_NUMBE.
ENDFORM.                     " SET_NO
*&---------------------------------------------------------------------*
*&      FORM  CASENUM
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM CASENUM .

   CASE G_SIN_NUM.
     WHEN  1.
      G_DACH =  '一'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  2.
      G_DACH =  '二'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  3.
      G_DACH =  '三'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  4.
      G_DACH =  '四'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  5.
      G_DACH =  '五'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  6.
      G_DACH =  '六'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  7.
      G_DACH =  '七'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  8.
      G_DACH =  '八'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  9.
      G_DACH =  '九'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.
     WHEN  0.
      G_DACH =  '〇'.
       CONCATENATE GT_NUMBE-NUMBE G_DACH  INTO GT_NUMBE-NUMBE.

  ENDCASE.
ENDFORM.                     " CASENUM
*&---------------------------------------------------------------------*
*&      FORM  SAVE_EXCEL
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM SAVE_EXCEL .
  DATA: LV_FILENAME  TYPE STRING,  "文件名
          LV_WINTITLE  TYPE STRING,  "文件标题
          LV_FILEPATH  TYPE STRING,  "路径
          LV_FULLPATH  TYPE STRING,  "全路径
          LV_DEFAULT   TYPE STRING.  "默认文件名
  DATA:  TITLE  TYPE STRING  VALUE  '.XLS'.
  DATA:G_ACTION  TYPE I.
  CLEAR:G_ACTION.

  LV_WINTITLE =  'EXCEL文档'.

  LV_DEFAULT  = TITLE.

*&---打开保存对话框
   CALL  METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
     EXPORTING
      WINDOW_TITLE      = LV_WINTITLE
      DEFAULT_EXTENSION =  'XLS'
      DEFAULT_FILE_NAME = LV_DEFAULT
      FILE_FILTER       =  'XLS'
*     INITIAL_DIRECTORY =
     CHANGING
      FILENAME          = LV_FILENAME
      PATH              = LV_FILEPATH
      FULLPATH          = LV_FULLPATH
      USER_ACTION       = G_ACTION
     EXCEPTIONS
      CNTL_ERROR        =  1
      ERROR_NO_GUI      =  2
       OTHERS            3.

   IF SY-SUBRC =  AND G_ACTION =  0.
    DATA: P_FILE  TYPE RLGRAP-FILENAME.
    P_FILE = LV_FULLPATH.

*&---保存文件
     CALL  METHOD GR_DOCUMENT->SAVE_AS
       EXPORTING
        FILE_NAME = P_FILE.

     IF SY-SUBRC =  0.
       MESSAGE  '文件已保存!'  TYPE  'I'.
       LEAVE  TO  SCREEN  0.
    ENDIF.
  ELSE.
     CLEAR SY-UCOMM.
  ENDIF.

ENDFORM.                     " SAVE_EXCEL
*&---------------------------------------------------------------------*
*&      FORM  S2B
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_G_SUM_MONEY  TEXT
*      -->P_G_GCZJE_BIG  TEXT
*----------------------------------------------------------------------*
FORM S2B   USING    P_G_SUM_MONEY
                   P_G_GCZJE_BIG.

  DATA:
          V_S00(2)  VALUE  '零',
          V_S01(2)  VALUE  '壹',
          V_S02(2)  VALUE  '贰',
          V_S03(2)  VALUE  '叁',
          V_S04(2)  VALUE  '肆',
          V_S05(2)  VALUE  '伍',
          V_S06(2)  VALUE  '陆',
          V_S07(2)  VALUE  '柒',
          V_S08(2)  VALUE  '捌',
          V_S09(2)  VALUE  '玖',
          V_W00(2)  VALUE  '',
          V_W01(2)  VALUE  '拾',
          V_W02(2)  VALUE  '佰',
          V_W03(2)  VALUE  '仟',
          V_W04(2)  VALUE  '万',
          V_W05(4)  VALUE  '拾',
          V_W06(4)  VALUE  '佰',
          V_W07(4)  VALUE  '仟',
          V_W08(2)  VALUE  '亿',
          V_W09(4)  VALUE  '拾',
          V_W10(4)  VALUE  '佰',
          V_W11(4)  VALUE  '仟',
          V_W12(4)  VALUE  '万',
          V_SY(2)   VALUE  '圆',
          V_SJ(2)   VALUE  '角',
          V_SF(2)   VALUE  '分',
          V_AMOUNT(16), "将金额转换成字符型
          V_LEN  TYPE I, "V_AMOUNT或OUT的长度
          V_VAR(5), "V_S0,V_S1,...,V_W0,V_W1,...
          V_NUM(2)  TYPE N, "每一位的数值
          V_S_NUM(2), "V_S0,V_S1,...中的值
          V_WEIGHT(2)  TYPE N, "权数
          V_W_NUM(4), "V_W0,V_W1,...中的值
          V_FLAG0  TYPE  VALUE 0, "是否输出'零',0不输出,1输出
          V_N  TYPE  VALUE 0,
          V_INDEX  TYPE SY-INDEX.
  V_AMOUNT = P_G_SUM_MONEY.
   SHIFT V_AMOUNT  LEFT DELETING  LEADING SPACE.
   SHIFT V_AMOUNT  LEFT DELETING  LEADING  '0'.
*-计算分-----------------------------------------
  V_LEN = STRLEN( V_AMOUNT ).
  V_LEN = V_LEN -  1.
  V_NUM = V_AMOUNT+V_LEN(1).
   IF V_NUM <>  '0'.
     CONCATENATE  'V_S' V_NUM  INTO V_VAR.
     WRITE (V_VAR)  TO V_S_NUM.
     CONCATENATE V_S_NUM V_SF P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
  ENDIF.
*-计算角-----------------------------------------
  V_LEN = STRLEN( V_AMOUNT ).
  V_LEN = V_LEN -  2.
  V_NUM = V_AMOUNT+V_LEN(1).
   IF V_NUM <>  '0'.
     CONCATENATE  'V_S' V_NUM  INTO V_VAR.
     WRITE (V_VAR)  TO V_S_NUM.
     CONCATENATE V_S_NUM V_SJ P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
  ENDIF.
*-输出‘整’字-------------------------------------
   IF P_G_GCZJE_BIG =  ' '.
     CONCATENATE  '整' P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
  ENDIF.
*-计算整数---------------------------------------
  V_LEN = STRLEN( V_AMOUNT ).
  V_LEN = V_LEN -  3.
   IF V_LEN =  0.
    EXIT.
  ENDIF.
  V_AMOUNT = V_AMOUNT(V_LEN). " 整数部分
*-输出‘元’字-------------------------------------
   CONCATENATE V_SY P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
  V_N = V_LEN -  1.
  V_WEIGHT =  0.
   DO V_LEN TIMES.
    V_INDEX = SY-INDEX.
*   从个位开始
    V_NUM = V_AMOUNT+V_N(1).
     IF V_NUM <>  '0'.
       CONCATENATE  'V_S' V_NUM  INTO V_VAR.
       WRITE (V_VAR)  TO V_S_NUM.
       CONCATENATE  'V_W' V_WEIGHT  INTO V_VAR.
       WRITE (V_VAR)  TO V_W_NUM.
       CONCATENATE V_S_NUM V_W_NUM P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
      V_FLAG0 =  1.
    ELSE.
       IF V_FLAG0 =  1.
         CONCATENATE  'V_S' V_NUM  INTO V_VAR.
         WRITE (V_VAR)  TO V_S_NUM.
         CONCATENATE V_S_NUM P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
        V_FLAG0 =  0.
      ENDIF.

       IF V_INDEX =  5   AND V_LEN >  AND V_LEN <  .
         CONCATENATE  '万' P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
       ELSEIF V_INDEX =  AND V_LEN >  9.
         CONCATENATE  '亿' P_G_GCZJE_BIG  INTO P_G_GCZJE_BIG.
      ENDIF.

*      CASE SY-INDEX.
*        WHEN 5.CONCATENATE '万' OUT INTO OUT.
*        WHEN 9.CONCATENATE '亿' OUT INTO OUT.
*      ENDCASE.
    ENDIF.
    V_WEIGHT = V_WEIGHT +  1.
    V_N = V_N -  1.
  ENDDO.
*-删除个位可能出现'零'的情况-----------------
   SEARCH P_G_GCZJE_BIG  FOR  '圆'.
   IF SY-SUBRC =  0.
    V_N = SY-FDPOS -  2.
     IF V_N >=  0.
       IF P_G_GCZJE_BIG+V_N(2) = V_S00.
        V_LEN = STRLEN( P_G_GCZJE_BIG ).
         CONCATENATE P_G_GCZJE_BIG(V_N) P_G_GCZJE_BIG+SY-FDPOS  INTO P_G_GCZJE_BIG.
      ENDIF.
    ENDIF.
  ENDIF.



ENDFORM.                     " S2B

你可能感兴趣的:(abap)