zoukankan      html  css  js  c++  java
  • excel控制

    *&---------------------------------------------------------------------*
    *&  Include           ZHREXCEL
    *&---------------------------------------------------------------------*

    *&---------------------------------------------------------------------*
    *&      Form  templetdownload
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->L_SRTFD    text
    *----------------------------------------------------------------------*
    FORM templetdownload  USING l_srtfd.
    *袁伦勇增加
      PERFORM templetdownload_new USING l_srtfd."新版本下载程序


    *  DATA ext(10).
    *  DATA l_filename  TYPE string.
    *  DATA lin TYPE i.
    *  DATA length TYPE i.
    **  DATA l_filename(128).
    *  DATA: data_container LIKE soli OCCURS 0 WITH HEADER LINE.
    *  DATA: f(128),f1(10).
    *  CLEAR data_container.
    *  REFRESH data_container.
    *  IMPORT data_container FROM DATABASE zhroffice(cn) ID l_srtfd.
    *  DESCRIBE TABLE data_container LINES lin.
    *  SPLIT zhroffice-filename AT '.' INTO f f1.
    *  ext = f1.
    *  TRANSLATE ext TO UPPER CASE.
    *  IF lin = 0.
    *    CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
    *      EXPORTING
    *        titel     = '下载文件'
    *        textline1 = '数据库错误!没有模板,请重新上载模板!'
    *      EXCEPTIONS
    *        OTHERS    = 1.
    *    EXIT.
    *  ENDIF.
    *
    *  READ TABLE data_container INDEX lin.
    *  length = data_container-line.
    *  CONCATENATE 'C:\' f sy-datum '.' f1 INTO l_filename.
    *
    *  CALL FUNCTION 'GUI_DOWNLOAD'
    *    EXPORTING
    *      bin_filesize                    = length
    *      filename                        = l_filename
    *      filetype                        = 'BIN'
    *    IMPORTING
    *      filelength                      = length
    *    TABLES
    *      data_tab                        = data_container
    **     FIELDNAMES                      =
    *   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
    *     OTHERS                          = 22
    *            .
    *  IF sy-subrc NE 0.
    *    CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
    *      EXPORTING
    *        titel     = '下载文件'
    *        textline1 = '下载失败!'
    *      EXCEPTIONS
    *        OTHERS    = 1.
    *    EXIT.
    *  ENDIF.
    *  CASE ext.
    *    WHEN 'XLS'.
    *      PERFORM startexcel USING l_filename l_srtfd.
    *    WHEN 'DOC'.
    *    WHEN OTHERS.
    *  ENDCASE.
    ENDFORM.                    "templetdownload


    *&---------------------------------------------------------------------*
    *&      Form  templetdownload_new
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->L_SRTFD    text
    *----------------------------------------------------------------------*
    FORM templetdownload_new  USING l_srtfd.
      DATA ext(10).
      DATA l_filename  TYPE string.
      DATA lin TYPE i.
      DATA length TYPE i.
    *  DATA l_filename(128).
      TYPES: BEGIN OF testline,
              line(256TYPE x,
             END OF testline.
      DATA: data_container TYPE TABLE OF testline WITH HEADER LINE.
      DATA: f(128),f1(10).
      DATA: g_workdir TYPE string.
      CLEAR data_container.
      REFRESH data_container.
      IMPORT data_container FROM DATABASE zhr_office(cnID l_srtfd.
      DESCRIBE TABLE data_container LINES lin.
      SPLIT zhr_office-filename AT '.' INTO f f1.
      ext f1.
      TRANSLATE ext TO UPPER CASE.
      IF lin 0.
        CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
          EXPORTING
            titel     '下载文件'
            textline1 '数据库错误!没有模板,请重新上载模板!'
          EXCEPTIONS
            OTHERS    1.
        EXIT.
      ENDIF.

      CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
        CHANGING
          sapworkdir            g_workdir
    *    EXCEPTIONS
    *      GET_SAPWORKDIR_FAILED = 1
    *      CNTL_ERROR            = 2
    *      ERROR_NO_GUI          = 3
    *      NOT_SUPPORTED_BY_GUI  = 4
    *      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.

      READ TABLE data_container INDEX lin.
      length data_container-line.
      CONCATENATE g_workdir '\' f sy-datum '.' f1 INTO l_filename.

      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          bin_filesize                    length
          filename                        l_filename
          filetype                        'BIN'
        IMPORTING
          filelength                      length
        TABLES
          data_tab                        data_container
    *     FIELDNAMES                      =
       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
         OTHERS                          22
                .
      IF sy-subrc NE 0.
        CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
          EXPORTING
            titel     '下载文件'
            textline1 '下载失败!'
          EXCEPTIONS
            OTHERS    1.
        EXIT.
      ENDIF.
      CASE ext.
        WHEN 'XLS'.
          PERFORM startexcel_new USING l_filename 'SHEET1'.
          PERFORM close_excel_tmp USING l_filename    ."关闭模板,新建电子表格
        WHEN 'DOC'.
        WHEN OTHERS.
      ENDCASE.
    ENDFORM.                    "templetdownload_new

    *&---------------------------------------------------------------------*
    *&      Form  startexcel_new
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->L_FILENAME text
    *      -->SHEET_NAME text
    *----------------------------------------------------------------------*
    FORM startexcel_new USING l_filename sheet_name .

      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          percentage 1
          text       '正在生成EXCEL文件,请稍候'.

    * start Excel
    ****origin version
      CREATE OBJECT v_excel 'EXCEL.APPLICATION'.
      IF g_display IS INITIAL.
        SET PROPERTY OF v_excel  'Visible' 0.
      ELSE.
        SET PROPERTY OF v_excel  'Visible' 1.
      ENDIF.
      CALL METHOD OF v_excel 'Workbooks' t_books.
      CALL METHOD OF t_books 'Open' t_book
        EXPORTING
        #1 l_filename.
      CALL METHOD OF t_book 'Worksheets' t_sheet
        EXPORTING
        #1 sheet_name.
      CALL METHOD OF t_sheet 'activate'.

    ENDFORM.                    "startexcel_new

    *---------------------------------------------------------------------*
    *       FORM StartExcel                                               *
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    *  -->  L_FILENAME                                                    *
    *---------------------------------------------------------------------*
    FORM startexcel USING l_filename sheet_name.

      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          percentage 1
          text       '正在生成EXCEL文件,请稍候'.

    * start Excel
    ****origin version
      CREATE OBJECT v_excel 'EXCEL.APPLICATION'.
      IF g_display IS INITIAL.
        SET PROPERTY OF v_excel  'Visible' 0.
      ELSE.
        SET PROPERTY OF v_excel  'Visible' 1.
      ENDIF.
      CALL METHOD OF v_excel 'Workbooks' l_books.
      CALL METHOD OF l_books 'Open' l_book
        EXPORTING
        #1 l_filename.
      CALL METHOD OF l_book 'Worksheets' sheet
        EXPORTING
        #1 sheet_name.
      CALL METHOD OF sheet 'activate'.
    *************************************************
    *  CREATE OBJECT v_excel 'EXCEL.APPLICATION'.
    *  SET PROPERTY OF v_excel  'Visible' = 1.
    *  CALL METHOD OF v_excel 'Workbooks' = t_books.
    *  CALL METHOD OF t_books 'Open' = t_book EXPORTING #1 = l_filename.
    *  CALL METHOD OF t_book 'Worksheets' = t_sheet
    *    EXPORTING
    *    #1 = sheet_name.
    *  CALL METHOD OF t_sheet 'activate'.
    *  CALL METHOD OF v_excel 'Range' = t_range
    *    EXPORTING
    *    #1 = 'A1'
    *    #2 = 'Z50'.
    *  CALL METHOD OF t_range 'Select'.
    *  CALL METHOD OF t_range 'Cut'.







    *  CALL METHOD OF v_excel 'Range' = t_range
    *    EXPORTING
    *    #1 = 'A1'
    *    #2 = 'ZZ100'.
    *  CALL METHOD OF t_range 'Select'.
    *  CALL METHOD OF t_range 'Cut'.

    *  CALL METHOD OF v_excel 'Workbooks' = l_books.
    *
    *  SET PROPERTY OF v_excel 'SheetsInNewWorkbook' = 1 .
    *  CALL METHOD OF l_books 'ADD'.
    *  CALL METHOD OF v_excel 'Worksheets' = sheet
    *    EXPORTING
    *      #1 = 1.
    *  CALL METHOD OF sheet 'ACTIVATE'.
    *  SET PROPERTY OF sheet     'NAME'       = 'Sheet1'.
    *  CALL METHOD OF v_excel 'Range' = a_range
    *    EXPORTING
    *    #1 = 'A1'
    *    #2 = 'A1'.
    *  CALL METHOD OF a_range 'Select' .
    *  CALL METHOD OF a_range 'Paste' .


    ENDFORM.                    "startexcel

    *&---------------------------------------------------------------------*
    *&      Form  DISPLAYEXCEL
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM displayexcel.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          percentage 100
          text       '正在生成EXCEL文件,请稍候'.

      IF g_display IS INITIAL.
        SET PROPERTY OF v_excel  'Visible' 1.
      ENDIF.
      PERFORM endexcel.

    ENDFORM.                    "DISPLAYEXCEL
    *---------------------------------------------------------------------*
    *       FORM startmerge                                               *
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    FORM startmerge .
      CALL METHOD OF v_excel 'RUN'
        EXPORTING
        #1 'startmerge'.
    ENDFORM.                    "startmerge
    *---------------------------------------------------------------------*
    *       FORM runmacro                                                 *
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    *  -->  MACRONAME                                                     *
    *---------------------------------------------------------------------*
    FORM runmacro USING macroname.
      CALL METHOD OF v_excel 'RUN'
        EXPORTING
        #1 macroname.
    ENDFORM.                    "runmacro
    *---------------------------------------------------------------------*
    *       FORM endexcel                                                 *
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    FORM endexcel.
      FREE OBJECT l_books.
      FREE OBJECT l_book.
      FREE OBJECT v_excel.
    ENDFORM.                    "endexcel

    *---------------------------------------------------------------------*
    *       FORM set_excel_cell                                           *
    *---------------------------------------------------------------------*
    *      在指定单元格内填充值,并且自动画单元格边框线                   *
    *      如无需表格线请使用set_excel_cell_noborder
    *---------------------------------------------------------------------*
    *  -->  L_ROW                                                         *
    *  -->  L_COLUMN                                                      *
    *  -->  L_VALUE                                                       *
    *---------------------------------------------------------------------*
    FORM set_excel_cell
      USING l_row      " cell row serial
            l_column   " cell column serial
            l_value.   " cell value
      IF l_value NE '0'.
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            percentage 50
            text       '正在生成EXCEL文件,请稍候'.

    *    set cell properties
        CALL METHOD OF v_excel 'Cells' cell
          EXPORTING
          #1 l_row
          #2 l_column.
        SET PROPERTY OF cell 'Value' l_value.
        PERFORM border USING  '1' '2'.
      ELSEIF l_value 0.
        CALL METHOD OF v_excel 'Cells' cell
          EXPORTING
          #1 l_row
          #2 l_column.
        SET PROPERTY OF cell 'Value' ' '.
        PERFORM border USING  '1' '2'.
      ENDIF.
    *    free object
      FREE OBJECT cell.
    *  ENDIF.
    ENDFORM.                     " FRM_EXCEL_CELL


    *---------------------------------------------------------------------*
    *       FORM set_excel_cell_noborder                                           *
    *---------------------------------------------------------------------*
    *      在指定单元格内填充值 ,没有边线                                 *
    *---------------------------------------------------------------------*
    *  -->  L_ROW                                                         *
    *  -->  L_COLUMN                                                      *
    *  -->  L_VALUE                                                       *
    *---------------------------------------------------------------------*
    FORM set_excel_cell_noborder
      USING l_row      " cell row serial
            l_column   " cell column serial
            l_value.   " cell value

      IF l_value NE '0' OR l_value IS NOT INITIAL.
        CALL METHOD OF v_excel 'Cells' cell
          EXPORTING
          #1 l_row
          #2 l_column.
        SET PROPERTY OF cell 'Value' l_value.
        FREE OBJECT cell.
      ENDIF.
    ENDFORM.                     " FRM_EXCEL_CELL_noborder
    *---------------------------------------------------------------------*
    *       FORM set_excel_style_2                                        *
    *---------------------------------------------------------------------*
    *      在指定单元格内填充值,并且自动画单元格边框线(虚线)             *
    *---------------------------------------------------------------------*
    *  -->  L_ROW                                                         *
    *  -->  L_COLUMN                                                      *
    *  -->  L_VALUE                                                       *
    *---------------------------------------------------------------------*
    FORM set_excel_cell_style_2
      USING l_row      " cell row serial
            l_column   " cell column serial
            l_value.   " cell value
      IF l_value NE '0'.
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            percentage 50
            text       '正在生成EXCEL文件,请稍候'.

    *    set cell properties
        CALL METHOD OF v_excel 'Cells' cell
          EXPORTING
          #1 l_row
          #2 l_column.
        SET PROPERTY OF cell 'Value' l_value.
        PERFORM border USING  '1' '1'.
      ELSEIF l_value 0.
        CALL METHOD OF v_excel 'Cells' cell
          EXPORTING
          #1 l_row
          #2 l_column.
        SET PROPERTY OF cell 'Value' ' '.
      ENDIF.
    *    free object
      FREE OBJECT cell.
    *  ENDIF.
    ENDFORM.                     " FRM_EXCEL_CELL

    *---------------------------------------------------------------------*
    *       FORM set_excel_range                                          *
    *---------------------------------------------------------------------*
    *       在指定的范围内填值,行列必须为确定的值                        *
    *---------------------------------------------------------------------*
    *  -->  L_START_CELL                                                  *
    *  -->  L_END_CELL                                                    *
    *  -->  L_VALUE                                                       *
    *  -->  DATA                                                          *
    *  -->  :                                                             *
    *  -->  L_RANGE                                                       *
    *---------------------------------------------------------------------*
    FORM set_excel_range
      USING l_start_cell    " start cell
            l_end_cell      " end cell
            l_value    .    " cell value

      DATA: l_range    TYPE ole2_object.

      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          percentage 50
          text       '正在生成EXCEL文件,请稍候'.

    * set range properties
      CALL METHOD OF v_excel 'Range' range
        EXPORTING
        #1 l_start_cell
        #2 l_end_cell.

      SET PROPERTY OF range 'MergeCells' 1.
      SET PROPERTY OF range 'Value' l_value.
      FREE OBJECT range.
    ENDFORM.                     " FRM_EXCEL_RANGE


    *&---------------------------------------------------------------------*
    *&      Form  border
    *&---------------------------------------------------------------------*
    *       画表格线
    *----------------------------------------------------------------------*
    *      -->PLINESTYLE text
    *      -->PWEIGHT    text
    *----------------------------------------------------------------------*
    FORM border USING plinestyle pweight .
    *left
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '1'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    ** right
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '2'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    * top
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '3'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    * bottom
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '4'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    ENDFORM.                    "border

    *&---------------------------------------------------------------------*
    *&      Form  Insert_row
    *&---------------------------------------------------------------------*
    *       插入新行
    *----------------------------------------------------------------------*
    *      -->ROW_NO     text
    *----------------------------------------------------------------------*
    FORM insert_row USING row_no.

      CALL METHOD OF v_excel 'ROWS' row
        EXPORTING
        #1 row_no.
      CALL METHOD OF row 'INSERT' NO FLUSH.

    ENDFORM.                    "Insert_row

    *&---------------------------------------------------------------------*
    *&      Form  fill_excel_range_merge
    *&---------------------------------------------------------------------*
    *       在指定范围内填值,行列数为变量,并自动合并单元格
    *----------------------------------------------------------------------*
    *      -->P_ROW_B    左上角的行值
    *      -->P_COL_B    左上角的列值
    *      -->P_ROW_E    右下角的行指
    *      -->P_COL_E    右下角的列值
    *      -->P_VALUE    值
    *      -->P_BORDER   带边框线=1, 不带边框线=0
    *      -->P_ALIGN    居中= 1, 不居中=0
    *----------------------------------------------------------------------*
    FORM fill_excel_range_merge USING p_row_b
                                      p_col_b
                                      p_row_e
                                      p_col_e
                                      p_value
                                      p_border
                                      p_align.

      DATA: l_cell1     TYPE ole2_object.
      DATA: l_cell2     TYPE ole2_object.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          percentage 50
          text       '正在生成EXCEL文件,请稍候'.

      CALL METHOD OF v_excel 'Cells' l_cell1
        EXPORTING
        #1 p_row_b
        #2 p_col_b.
      CALL METHOD OF v_excel 'Cells' l_cell2
        EXPORTING
        #1 p_row_e
        #2 p_col_e.
      CALL METHOD OF v_excel 'Range' range
        EXPORTING
        #1 l_cell1
        #2 l_cell2.

      SET PROPERTY OF range 'MergeCells' 1.
      SET PROPERTY OF range 'Value' p_value.
      IF p_border 1.
        PERFORM range_border USING '1' '2'.
      ENDIF.
      IF p_align 1.
        SET PROPERTY OF range  'HorizontalAlignment' -4108 .
        SET PROPERTY OF range  'VerticalAlignment' -4108  .
      ENDIF.
      FREE OBJECT range.

    ENDFORM.                    "fill_excel_range_merge


    *&---------------------------------------------------------------------*
    *&      Form  range_border
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->PLINESTYLE text
    *      -->PWEIGHT    text
    *----------------------------------------------------------------------*
    FORM range_border USING plinestyle pweight .
    *left
      CALL METHOD OF range 'BORDERS' borders
        EXPORTING
        #1 '1'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    ** right
      CALL METHOD OF range 'BORDERS' borders
        EXPORTING
        #1 '2'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    * top
      CALL METHOD OF range 'BORDERS' borders
        EXPORTING
        #1 '3'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    * bottom
      CALL METHOD OF range 'BORDERS' borders
        EXPORTING
        #1 '4'.
      SET PROPERTY OF borders 'Linestyle' plinestyle .
      SET PROPERTY OF borders 'Weight' pweight .
      FREE OBJECT borders.
    ENDFORM.                    "range_border

    *&---------------------------------------------------------------------*
    *&      Form  set_excel_range_border
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->L_START_CELL  text
    *      -->L_END_CELL    text
    *      -->L_VALUE       text
    *      -->L_BORDER     text
    *      -->L_ALIGN     text
    *----------------------------------------------------------------------*
    FORM set_excel_range_border
      USING l_start_cell    " start cell
            l_end_cell      " end cell
            l_value         " cell value
            l_border        " border
            l_align         " alignment
            .
      DATA: l_range    TYPE ole2_object.

    * set range properties
      CALL METHOD OF v_excel 'Range' range
        EXPORTING
        #1 l_start_cell
        #2 l_end_cell.

      SET PROPERTY OF range 'MergeCells' 1.
      SET PROPERTY OF range 'Value' l_value.
      IF l_border 1.
        PERFORM range_border USING '1' '2'.
      ENDIF.
      IF l_align 1.
        SET PROPERTY OF range  'HorizontalAlignment' -4108 .
        SET PROPERTY OF range  'VerticalAlignment' -4108  .
      ENDIF.
      FREE OBJECT range.
    ENDFORM.                     "


    *&---------------------------------------------------------------------*
    *&      Form  COPY_EXCEL_DATA_S
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->F_ROW_B    text 开始左行
    *      -->F_COL_B    text 开始左列
    *      -->F_ROW_E    text 结束右行
    *      -->F_COL_E    text 结束右列
    *      -->P_SKIN     text 跳动几行粘贴的拷贝数据,以F_ROW_E参考
    *----------------------------------------------------------------------*
    FORM copy_excel_data_s USING
                              f_row_b
                              f_col_b
                              f_row_e
                              f_col_e
                              p_skin.

      DATA:pasterow TYPE i.
      DATA:t_row_b TYPE i.
      DATA:t_col_b TYPE i.
      DATA:t_row_e TYPE i.
      DATA:t_col_e TYPE i.

      pasterow f_row_e + p_skin .
      t_row_b pasterow.
      t_col_b f_col_b.
      t_row_e f_row_e f_row_b + pasterow.
      t_col_e f_col_e.
      PERFORM copy_excel_data USING
                                f_row_b
                                f_col_b
                                f_row_e
                                f_col_e
                                t_row_b
                                t_col_b
                                t_row_e
                                t_col_e.

    ENDFORM.                    "COPY_EXCEL_DATA_S


    *&---------------------------------------------------------------------*
    *&      Form  COPY_EXCEL_DATA
    *&---------------------------------------------------------------------*
    *       拷贝数据另外位置
    *----------------------------------------------------------------------*
    *      -->F_ROW_B    text 开始左行
    *      -->F_COL_B    text 开始左列
    *      -->F_ROW_E    text 结束右行
    *      -->F_COL_E    text 结束右列
    *      -->T_ROW_B    text 目标左行
    *      -->T_COL_B    text 目标左列
    *      -->T_ROW_E    text 目标右行
    *      -->T_COL_E    text 目标右列
    *----------------------------------------------------------------------*
    FORM copy_excel_data USING
                              f_row_b
                              f_col_b
                              f_row_e
                              f_col_e
                              t_row_b
                              t_col_b
                              t_row_e
                              t_col_e.

      DATA: l_cell1     TYPE ole2_object.
      DATA: l_cell2     TYPE ole2_object.
      DATA: l_cell3     TYPE ole2_object.
      DATA: l_cell4     TYPE ole2_object.

      CALL METHOD OF v_excel 'Cells' l_cell1
        EXPORTING
        #1 f_row_b
        #2 f_col_b.
      CALL METHOD OF v_excel 'Cells' l_cell2
        EXPORTING
        #1 f_row_e
        #2 f_col_e.
      CALL METHOD OF v_excel 'Range' range
        EXPORTING
        #1 l_cell1
        #2 l_cell2.

    *  SET PROPERTY OF range 'MergeCells' = 1.

    ****    Copy Data
    *  call method of v_excel 'Worksheets' = sheet
    *    exporting #1 = 1.
    *   CALL METHOD  OF sheet   'Range' = range EXPORTING #1 = 'B2'  #2 =
    *  'G2'.
      CALL METHOD OF range 'select'.
      CALL METHOD OF range 'copy'.
    *   sheetnum = sheetnum + 1 .
    *   condense sheetnum .
    ***  Paste data
    *   CALL  METHOD  OF v_excel  'Worksheets'  =  SHEET
    *                      EXPORTING  #1  =  2 .
    *   CALL METHOD  OF SHEET  'RANGE' = range EXPORTING #1 = 'B2' .
      CALL METHOD OF v_excel 'Cells' l_cell3
        EXPORTING
        #1 t_row_b
        #2 t_col_b.
      CALL METHOD OF v_excel 'Cells' l_cell4
        EXPORTING
        #1 t_row_e
        #2 t_col_e.
      CALL METHOD OF v_excel 'Range' range
        EXPORTING
        #1 l_cell3
        #2 l_cell4.

      CALL METHOD OF range 'select'.
      CALL METHOD OF sheet 'PasteSpecial'.

      FREE OBJECT range.
    ENDFORM.                    "COPY_EXCEL_DATA

    *&---------------------------------------------------------------------*
    *&      Form  EXCEL_CELL_FILL
    *&---------------------------------------------------------------------*
    *       填充单元格,可以控制边框风格,水平/垂直对齐方式等
    *----------------------------------------------------------------------*
    *      -->P_ROW             text 行
    *      -->P_COL             text 列
    *      -->P_VALUE           text 值
    *      -->TOP_LINESTYLE     text 上边框样式
    *      -->TOP_LINEWEGIHT    text 上边框粗细
    *      -->BOTT_LINESTYLE    text 边框样式
    *      -->BOTT_LINEWEGIHT   text 边框粗细
    *      -->LEFT_LINESTYLE    text 边框样式
    *      -->LEFT_LINEWEGIHT   text 边框粗细
    *      -->RIGHT_LINESTYLE   text 边框样式
    *      -->RIGHT_LINEWEGIHT  text 边框粗细
    *      -->V_ALIGN           text 水平对齐 1:居中 0:缺省
    *      -->H_ALIGN           text 垂直对齐 1:居中 0:缺省
    *----------------------------------------------------------------------*
    FORM excel_cell_fill USING
                              p_row
                              p_col
                              p_value
                              top_linestyle
                              top_linewegiht
                              bott_linestyle
                              bott_linewegiht
                              left_linestyle
                              left_linewegiht
                              right_linestyle
                              right_linewegiht
                              v_align
                              h_align.

      CALL METHOD OF v_excel 'Cells' cell
        EXPORTING
        #1 p_row
        #2 p_col."定位
      SET PROPERTY OF cell 'Value' p_value."赋值
    *边框设置
    * top
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '3'.
      SET PROPERTY OF borders 'Linestyle' top_linestyle .
      SET PROPERTY OF borders 'Weight' top_linewegiht .
      FREE OBJECT borders.
    * bottom
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '4'.
      SET PROPERTY OF borders 'Linestyle' bott_linestyle .
      SET PROPERTY OF borders 'Weight' bott_linewegiht .
      FREE OBJECT borders.

    *left
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '1'.
      SET PROPERTY OF borders 'Linestyle' left_linestyle .
      SET PROPERTY OF borders 'Weight' left_linewegiht .
      FREE OBJECT borders.
    ** right
      CALL METHOD OF cell 'BORDERS' borders
        EXPORTING
        #1 '2'.
      SET PROPERTY OF borders 'Linestyle' right_linestyle .
      SET PROPERTY OF borders 'Weight' right_linewegiht .
      FREE OBJECT borders.

      IF v_align 1.
        SET PROPERTY OF cell  'VerticalAlignment' -4108  .
      ENDIF.
      IF h_align 1.
        SET PROPERTY OF cell  'HorizontalAlignment' -4108 .
      ENDIF.

    *    free object
      FREE OBJECT cell.


    ENDFORM.                    "EXCEL_CELL_FILL

    *&---------------------------------------------------------------------*
    *&      Form  close_excel_tmp
    *&---------------------------------------------------------------------*
    *       关闭模板,新建电子表格
    *----------------------------------------------------------------------*
    FORM close_excel_tmp USING p_filename.

      DATA: l_filename LIKE rlgrap-filename.
      DATA: l_cell1     TYPE ole2_object.
      DATA: l_cell2     TYPE ole2_object.
      DATA: l_cell3     TYPE ole2_object.
      DATA: l_cell4     TYPE ole2_object.
      DATA:s_cells      TYPE ole2_object.
      DATA:d_cells      TYPE ole2_object.
    *  DATA: l_books2     TYPE ole2_object.
    *  DATA: l_book2     TYPE ole2_object.
    *  DATA: l_sheet     TYPE ole2_object.
    *  DATA: range2     TYPE ole2_object.
    *  DATA: d_excel  TYPE ole2_object.     " Excel object

      CALL METHOD OF v_excel 'Cells' l_cell1
        EXPORTING
        #1 1
        #2 1.
    *  CALL METHOD OF v_excel 'Cells' = l_cell2
    *    EXPORTING
    *    #1 = 100
    *    #2 = 100.
    *  CALL METHOD OF v_excel 'Range' = range
    *    EXPORTING
    *    #1 = l_cell1
    *    #2 = l_cell2.

    *  CALL METHOD OF range 'select'.
    *  CALL METHOD OF range 'copy'.
      CALL METHOD OF t_sheet 'Cells' s_cells.
      CALL METHOD OF s_cells 'select'.
      CALL METHOD OF s_cells 'copy'.

    *
      CALL METHOD OF v_excel 'Workbooks' l_books.
      CALL METHOD OF l_books 'Add' l_book
        EXPORTING
        #1
        =''.
      CALL METHOD OF l_book 'Worksheets' sheet
        EXPORTING
        #1 'Sheet1'.

      SET PROPERTY OF sheet 'Name' 'Sheet1'.
      CALL METHOD OF sheet 'activate'.

      CALL METHOD OF sheet 'Cells' d_cells.
      CALL METHOD OF d_cells 'select'.
      CALL METHOD OF sheet 'paste'.

    *  CALL METHOD OF v_excel 'Cells' = l_cell3
    *    EXPORTING
    *    #1 = 1
    *    #2 = 1.
    *  CALL METHOD OF v_excel 'Cells' = l_cell4
    *    EXPORTING
    *    #1 = 100
    *    #2 = 100.
    *  CALL METHOD OF v_excel 'Range' = range
    *    EXPORTING
    *    #1 = l_cell3
    *    #2 = l_cell4.

    *  CALL METHOD OF l_book 'ActiveSheet'.
    *  CALL METHOD OF sheet 'select'.

    *  CALL METHOD OF l_cell1 'select'.

      PERFORM set_excel_range USING 'AA200' 'AA200' ''.
      CALL METHOD OF t_book 'Activate'.
      CALL METHOD OF t_book 'Close'
        EXPORTING
        #1 0.

      FREE OBJECT t_book.
      FREE OBJECT t_books.

      l_filename p_filename.

      CALL FUNCTION 'WS_FILE_DELETE'
        EXPORTING
          file   l_filename
        EXCEPTIONS
          OTHERS 1.

    ENDFORM.                    "close_excel_tmp


    *&---------------------------------------------------------------------*
    *&      Form  Insert_photo
    *&---------------------------------------------------------------------*
    *       插入本地图片到excel中
    *----------------------------------------------------------------------*
    *      -->P_ROW          插入行
    *      -->P_COL          插入列
    *      -->P_FILENAME     本地图片文件名
    *      -->P_SCALEWIDTH   横向缩放 比如 0.18 = 缩为18%
    *      -->P_SCALEHEIGHT  纵向缩放
    *----------------------------------------------------------------------*
    FORM insert_photo USING p_row
                            p_col
                            p_filename
                            p_scalewidth
                            p_scaleheight.

      DATA: l_filename LIKE rlgrap-filename.

      DATA: gs_pictures TYPE ole2_object .
      DATA: gs_picture TYPE ole2_object.
      DATA: gs_shaperange TYPE ole2_object.
      DATA: gs_cell2 TYPE ole2_object.

      CALL METHOD OF v_excel 'Cells' gs_cell2
        EXPORTING
        #1 p_row
        #2 p_col.
      CALL METHOD OF gs_cell2 'Select'.

      GET PROPERTY OF l_books 'Application' v_application .
      GET PROPERTY OF v_application 'ActiveSheet' sheet .

      CALL METHOD OF sheet 'Pictures' gs_pictures.
      CALL METHOD OF gs_pictures 'Insert' gs_picture
        EXPORTING
        #1 'C:\photo.jpg'.
      CALL METHOD OF gs_picture 'Select'.
      GET PROPERTY OF gs_picture 'ShapeRange' gs_shaperange .
      CALL METHOD OF gs_shaperange 'ScaleWidth'
        EXPORTING
        #1 p_scalewidth
        #2 0.

      CALL METHOD OF gs_shaperange 'ScaleHeight'
        EXPORTING
        #1 p_scaleheight
        #2 0.

      l_filename p_filename.

      CALL FUNCTION 'WS_FILE_DELETE'
        EXPORTING
          file   l_filename
        EXCEPTIONS
          OTHERS 1.

      FREE: gs_pictures,gs_picture,gs_shaperange,gs_cell2.

    ENDFORM.                    "Insert_photo

    *&---------------------------------------------------------------------*
    *&      Form  copy_lines
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_ROW        text
    *      -->P_ROW_COUNT  text
    *----------------------------------------------------------------------*
    FORM copy_lines USING p_row
                          p_row_count.

      DATA gs_rows TYPE ole2_object.
    *  DATA gs_rows2 TYPE ole2_object.

    *  CHECK p_row_count > 1 AND
    *        p_row_count < 99.

      DO p_row_count TIMES.
        CALL METHOD OF v_excel 'Rows' gs_rows
          EXPORTING
          #1 p_row.
        CALL METHOD OF gs_rows 'Select'.
        CALL METHOD OF gs_rows 'Copy'.
        CALL METHOD OF gs_rows 'Insert'
          EXPORTING
          #1 -4121.
      ENDDO.

    ENDFORM.                    "COPY_LINES


    *&---------------------------------------------------------------------*
    *&      Form  delete_row
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->ROW_NO     text
    *----------------------------------------------------------------------*
    FORM delete_row USING row_no.

      CALL METHOD OF v_excel 'ROWS' row
        EXPORTING
        #1 row_no.
      CALL METHOD OF row 'DELETE' NO FLUSH.

    ENDFORM.                    "delete_row

    *&---------------------------------------------------------------------*
    *&      Form  delete_range
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->A          text  例子: A1
    *      -->B          text  例子: A999
    *    则 删除A列
    *----------------------------------------------------------------------*
    FORM delete_range USING a b.

      CALL METHOD OF v_excel 'Range' range
        EXPORTING
        #1 a
        #2 b.
      CALL METHOD OF range 'DELETE' NO FLUSH.
    ENDFORM.                    "delete_range
    *---------------------------------------------------------------------*
    *  ADD BY LIHAO 多sheet输出
    *----------------------------------------------------------------------*

    FORM templetdownload_new001  USING l_srtfd.
      DATA ext(10).
      DATA l_filename  TYPE string.
      DATA lin TYPE i.
      DATA length TYPE i.

      TYPES: BEGIN OF testline,
              line(256TYPE x,
             END OF testline.
      DATA: data_container TYPE TABLE OF testline WITH HEADER LINE.
      DATA: f(128),f1(10).
      CLEAR data_container.
      REFRESH data_container.
      IMPORT data_container FROM DATABASE zhr_office(cnID l_srtfd.
      DESCRIBE TABLE data_container LINES lin.
      SPLIT zhr_office-filename AT '.' INTO f f1.
      ext f1.
      TRANSLATE ext TO UPPER CASE.
      IF lin 0.
        CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
          EXPORTING
            titel     '下载文件'
            textline1 '数据库错误!没有模板,请重新上载模板!'
          EXCEPTIONS
            OTHERS    1.
        EXIT.
      ENDIF.

      READ TABLE data_container INDEX lin.
      length data_container-line.
      CONCATENATE 'C:\' f sy-datum '.' f1 INTO l_filename.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          bin_filesize            length
          filename                l_filename
          filetype                'BIN'
        IMPORTING
          filelength              length
        TABLES
          data_tab                data_container
        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
          OTHERS                  22.
      CASE ext.


        WHEN 'XLS'.
          PERFORM startexcel_new001 USING l_filename 'SHEET1'.

        WHEN 'DOC'.
        WHEN OTHERS.
      ENDCASE.
    ENDFORM.                    "templetdownload_new


    *&---------------------------------------------------------------------*
    *&      Form  startexcel_new1
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->L_FILENAME text
    *      -->SHEET_NAME text
    *----------------------------------------------------------------------*
    FORM startexcel_new001 USING l_filename sheet_name .

      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          percentage 1
          text       '正在生成EXCEL文件,请稍候'.

      CALL METHOD OF t_books 'Open' t_book
        EXPORTING
        #1 l_filename.
      CALL METHOD OF t_book 'Worksheets' t_sheet
        EXPORTING
        #1 sheet_name.
      CALL METHOD OF t_sheet 'activate'.

    ENDFORM.                    "startexcel_new

    *&---------------------------------------------------------------------*
    *&      Form  START_EXCEL
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM start_excel001.

      CREATE OBJECT v_excel 'EXCEL.APPLICATION'.
      IF g_display IS INITIAL.
        SET PROPERTY OF v_excel  'Visible' 0.
      ELSE.
        SET PROPERTY OF v_excel  'Visible' 1.
      ENDIF.

      CALL METHOD OF v_excel 'Workbooks' t_books.

    ENDFORM.                    "START_EXCEL

    *&---------------------------------------------------------------------*
    *&      Form  CLOSE_EXCEL
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM close_excel001.
      SET PROPERTY OF v_excel  'DisplayAlerts' 0 .
      CALL METHOD OF v_excel 'QUIT' .    "DisplayAlerts 属性设置为 False

      FREE OBJECT t_books.   """""
      FREE OBJECT v_excel.  """"

    ENDFORM.                    "CLOSE_EXCEL

    *----------------------------------------------------------------------------*
    *激活不同的sheet
    *-----------------------------------------------------------------------------*
    FORM excel_sheet_active001 USING  sheet_name .

      CALL METHOD OF v_excel 'WORKSHEETS' sheet
        EXPORTING
        #1 sheet_name.
      CALL METHOD OF sheet 'ACTIVATE'.

      FREE OBJECT sheet.   "OK

    ENDFORM.                    "EXCEL_SHEET_ACTIVE

    *----------------------------------------------------------------------*
    *修改sheet名称
    *-----------------------------------------------------------------------*

    FORM excel_sheet_name_init001 USING  sheet_name sheet_newname.

      CALL METHOD OF v_excel 'WORKSHEETS' sheet
        EXPORTING
        #1 sheet_name.
      CALL METHOD OF sheet 'ACTIVATE'.

      SET PROPERTY OF sheet     'NAME'       sheet_newname .

      FREE OBJECT sheet.   "OK

    ENDFORM.                    "EXCEL_SHEET_NAME_INIT
    *&---------------------------------------------------------------------*
    *&      Form  copy_mem2excel
    *&---------------------------------------------------------------------*
    *       text复制剪切板内容到excel
    *----------------------------------------------------------------------*
    *      -->ROW        行号
    *      -->COL        列号
    *----------------------------------------------------------------------*
    FORM copy_mem2excel USING row col.
      DATA: l_cell     TYPE ole2_object.
      DATA: activesheet    TYPE ole2_object.
      CALL METHOD OF v_excel 'Cells' l_cell
        EXPORTING
        #1 row
        #2 col.
      CALL METHOD OF v_excel 'Range' range
        EXPORTING
        #1 l_cell
        #2 l_cell.
    *
      CALL METHOD OF range 'select'.
      GET PROPERTY OF v_excel 'Activesheet' activesheet.
      CALL METHOD OF activesheet 'Paste'.

      FREE OBJECT range.
    ENDFORM.                    "copy_mem2excel

  • 相关阅读:
    LeetCode【709. 转换成小写字母】
    静态方法、变量与实例方法、变量之比较心得
    用户控件自定义 DependencyProperty 属性使用教程
    TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠
    ABP 框架实战系列(三)-领域层深入篇
    ABP 框架实战系列(二)- 领域层介绍篇
    ABP框架实战系列(一)-持久层介绍篇
    EF Core 基础知识
    EF Core Migration 报错:An error occurred using the connection to database '' on server '10.28.253.2'
    2020年总结:互联网思维下的工业软件开发
  • 原文地址:https://www.cnblogs.com/purehunter/p/2331858.html
Copyright © 2011-2022 走看看