• ABAP DEMO ole示例程序


    *&---------------------------------------------------------------------*
    *& Report YCX_021
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT YCX_021.
    INCLUDE OLE2INCL .
    
    
    
    *-----------------------------------------------------------------------
    
    *     Global GUI Controls Variables / Structures
    
    *-----------------------------------------------------------------------
    
    
    
    *--Data Definition of OLE
    
    DATA: GS_EXCEL          TYPE OLE2_OBJECT ,
    
          GS_WBOOKLIST      TYPE OLE2_OBJECT ,
    
          GS_APPLICATION    TYPE OLE2_OBJECT ,
    
          GS_WBOOK          TYPE OLE2_OBJECT ,
    
          GS_ACTIVESHEET    TYPE OLE2_OBJECT ,
    
          GS_SHEETS         TYPE OLE2_OBJECT ,
    
          GS_NEWSHEET       TYPE OLE2_OBJECT ,
    
          GS_CELL1          TYPE OLE2_OBJECT ,
    
          GS_CELL2          TYPE OLE2_OBJECT ,
    
          GS_CELLS          TYPE OLE2_OBJECT ,
    
          GS_RANGE          TYPE OLE2_OBJECT ,
    
          GS_FONT           TYPE OLE2_OBJECT ,
    
          GS_INTERIOR       TYPE OLE2_OBJECT ,
    
          GS_COLUMNS        TYPE OLE2_OBJECT ,
    
          GS_CHARTS         TYPE OLE2_OBJECT ,
    
          GS_CHART          TYPE OLE2_OBJECT ,
    
          GS_CHARTTITLE     TYPE OLE2_OBJECT ,
    
          GS_CHARTTITLECHAR TYPE OLE2_OBJECT ,
    
          GS_CHARTOBJECTS   TYPE OLE2_OBJECT .
    
    
    
    DATA GV_SHEET_NAME(20) TYPE C .
    
    DATA GV_OUTER_INDEX LIKE SY-INDEX .
    
    DATA GV_INTEX(2) TYPE C .
    
    DATA GV_LINE_CNTR TYPE I . "line counter
    
    DATA GV_LINNO TYPE I . "line number
    
    DATA GV_COLNO TYPE I . "column number
    
    DATA GV_VALUE TYPE I . "data
    
    *$*$----------------------------------------------------------------$*$*
    
    *$*$                      Selection Screen                          $*$*
    
    *$*$----------------------------------------------------------------$*$*
    
    *-----------------------------------------------------------------------
    
    *                   Selection Screen
    
    *-----------------------------------------------------------------------
    
    PARAMETERS: P_SHEETS TYPE I .
    
    
    
    *$*$----------------------------------------------------------------$*$*
    
    *$*$                          Main Program                          $*$*
    
    *$*$----------------------------------------------------------------$*$*
    
    
    
    *--------- START-OF-SELECTION ----------
    
    
    
    START-OF-SELECTION .
    
    
    
      DO P_SHEETS TIMES .
    
    *--Forming sheet name
    
        GV_INTEX = SY-INDEX .
    
        GV_OUTER_INDEX = SY-INDEX .
    
        CONCATENATE 'Excel Sheet #' GV_INTEX INTO GV_SHEET_NAME .
    
    *--For the first loop, Excel is initiated and one new sheet is added
    
        IF SY-INDEX = 1 .
    
          CREATE OBJECT GS_EXCEL 'EXCEL.APPLICATION' .
    
          SET PROPERTY OF GS_EXCEL 'Visible' = 1 .
    
          GET PROPERTY OF GS_EXCEL 'Workbooks' = GS_WBOOKLIST .
    
          GET PROPERTY OF GS_WBOOKLIST 'Application' = GS_APPLICATION .
    
          SET PROPERTY OF GS_APPLICATION 'SheetsInNewWorkbook' = 1 .
    
          CALL METHOD OF
              GS_WBOOKLIST
              'Add'        = GS_WBOOK.
    
          GET PROPERTY OF GS_APPLICATION 'ActiveSheet' = GS_ACTIVESHEET .
    
          SET PROPERTY OF GS_ACTIVESHEET 'Name' = GV_SHEET_NAME .
    
    *--For the rest of loops, other sheets are added
    
        ELSE .
    
          GET PROPERTY OF GS_WBOOK 'Sheets' = GS_SHEETS .
    
          CALL METHOD OF
              GS_SHEETS
              'Add'     = GS_NEWSHEET.
    
          SET PROPERTY OF GS_NEWSHEET 'Name' = GV_SHEET_NAME .
    
        ENDIF .
    
    
    
        GV_LINE_CNTR = 1 . "line counter
    
    
    
    *--Title
    
    *--Selecting cell area to be merged.
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = 1
            #2       = 1.
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL2
          EXPORTING
            #1       = 1
            #2       = 4.
    
        CALL METHOD OF
            GS_EXCEL
            'Range'  = GS_CELLS
          EXPORTING
            #1       = GS_CELL1
            #2       = GS_CELL2.
    
        CALL METHOD OF
            GS_CELLS
            'Select'.
    
    
    
    
    
    *--Merging
    
        CALL METHOD OF
            GS_CELLS
            'Merge'.
    
    
    
    *--Setting title data
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 1.
    
        SET PROPERTY OF GS_CELL1 'Value' = 'TITLE' .
    
    *--Formatting the title
    
        GET PROPERTY OF GS_CELL1 'Font' = GS_FONT .
    
        SET PROPERTY OF GS_FONT 'Underline' = 2 .
    
        SET PROPERTY OF GS_FONT 'Bold' = 1 .
    
        SET PROPERTY OF GS_CELL1 'HorizontalAlignment' = -4108 .
    
        GET PROPERTY OF GS_CELL1 'Interior' = GS_INTERIOR .
    
        SET PROPERTY OF GS_INTERIOR 'ColorIndex' = 15 .
    
        SET PROPERTY OF GS_INTERIOR 'Pattern' = -4124 .
    
        SET PROPERTY OF GS_INTERIOR 'PatternColorIndex' = -4105 .
    
    
    
        GV_LINE_CNTR = GV_LINE_CNTR + 1 .
    
    *--Writing some additional data for the title
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 1.
    
        SET PROPERTY OF GS_CELL1 'Value' = 'Sheet No' .
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 5.
    
        SET PROPERTY OF GS_CELL1 'Value' = ':' .
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 6.
    
        SET PROPERTY OF GS_CELL1 'Value' = GV_INTEX .
    
    *--Formatting the area of additional data 1
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = 1
            #2       = 1.
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL2
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 5.
    
        CALL METHOD OF
            GS_EXCEL
            'Range'  = GS_CELLS
          EXPORTING
            #1       = GS_CELL1
            #2       = GS_CELL2.
    
        CALL METHOD OF
            GS_CELLS
            'Select'.
    
        GET PROPERTY OF GS_CELLS 'Font' = GS_FONT .
    
        SET PROPERTY OF GS_FONT 'Bold' = 1 .
    
    
    
    *--Formatting the area of additional data 2
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = 1
            #2       = 5.
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL2
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 5.
    
        CALL METHOD OF
            GS_EXCEL
            'Range'  = GS_CELLS
          EXPORTING
            #1       = GS_CELL1
            #2       = GS_CELL2.
    
        CALL METHOD OF
            GS_CELLS
            'Select'.
    
        GET PROPERTY OF GS_CELLS 'Columns' = GS_COLUMNS .
    
        CALL METHOD OF
            GS_COLUMNS
            'AutoFit'.
    
    *--Bordering title data area
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = 1
            #2       = 1.
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL2
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 6.
    
        CALL METHOD OF
            GS_EXCEL
            'Range'  = GS_CELLS
          EXPORTING
            #1       = GS_CELL1
            #2       = GS_CELL2.
    
        CALL METHOD OF
            GS_CELLS
            'Select'.
    
        CALL METHOD OF
            GS_CELLS
            'BorderAround'
    
          EXPORTING
            #1             = 1 "continuous line
            #2             = 4. "thick
    
    
    
    *--Putting axis labels
    
        GV_COLNO = 2 .
    
        GV_LINE_CNTR = GV_LINE_CNTR + 5 .
    
        GV_LINNO = GV_LINE_CNTR - 1 .
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINNO
            #2       = 1.
    
        SET PROPERTY OF GS_CELL1 'Value' = 'X' .
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 1.
    
        SET PROPERTY OF GS_CELL1 'Value' = 'Y' .
    
    
    
    *--Generating some data
    
        DO 3 TIMES .
    
          GV_VALUE = GV_OUTER_INDEX * SY-INDEX * 10 .
    
          CALL METHOD OF
              GS_EXCEL
              'Cells'  = GS_CELL1
            EXPORTING
              #1       = GV_LINNO
              #2       = GV_COLNO.
    
          SET PROPERTY OF GS_CELL1 'Value' = SY-INDEX .
    
          CALL METHOD OF
              GS_EXCEL
              'Cells'  = GS_CELL1
            EXPORTING
              #1       = GV_LINE_CNTR
              #2       = GV_COLNO.
    
          SET PROPERTY OF GS_CELL1 'Value' = GV_VALUE .
    
          GV_COLNO = GV_COLNO + 1 .
    
        ENDDO .
    
    *--Source data area
    
        GV_COLNO = GV_COLNO - 1 .
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINNO
            #2       = 1.
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL2
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = GV_COLNO.
    
        CALL METHOD OF
            GS_EXCEL
            'Range'  = GS_CELLS
          EXPORTING
            #1       = GS_CELL1
            #2       = GS_CELL2.
    
        CALL METHOD OF
            GS_CELLS
            'Select'.
    
    
    
        GET PROPERTY OF GS_APPLICATION 'Charts' = GS_CHARTS .
    
        CALL METHOD OF
            GS_CHARTS
            'Add'     = GS_CHART.
    
        CALL METHOD OF
            GS_CHART
            'Activate'.
    
        SET PROPERTY OF GS_CHART 'ChartType' = '51' . "Vertical bar graph
    
        CALL METHOD OF
            GS_CHART
            'SetSourceData'
    
          EXPORTING
            #1              = GS_CELLS
            #2              = 1.
    
        SET PROPERTY OF GS_CHART 'HasTitle' = 1 .
    
        GET PROPERTY OF GS_CHART 'ChartTitle' = GS_CHARTTITLE .
    
        GET PROPERTY OF GS_CHARTTITLE 'Characters' = GS_CHARTTITLECHAR .
    
        SET PROPERTY OF GS_CHARTTITLECHAR 'Text' = 'Sample Graph' .
    
    
    
    *--Locate the chart onto the current worksheet
    
    *--Activate current sheet
    
        CALL METHOD OF
            GS_EXCEL
            'WorkSheets' = GS_ACTIVESHEET
          EXPORTING
            #1           = GV_SHEET_NAME.
    
        CALL METHOD OF
            GS_ACTIVESHEET
            'Activate'.
    
        CALL METHOD OF
            GS_CHART
            'Location'
    
          EXPORTING
            #1         = 2
            #2         = GV_SHEET_NAME.
    
    
    
    *--Reposition the chart on the worksheet (cut&paste)
    
        CALL METHOD OF
            GS_ACTIVESHEET
            'ChartObjects' = GS_CHARTOBJECTS.
    
        CALL METHOD OF
            GS_CHARTOBJECTS
            'Select'.
    
        CALL METHOD OF
            GS_CHARTOBJECTS
            'Cut'.
    
    *--Select new area
        GV_LINE_CNTR = GV_LINE_CNTR + 2 .
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL1
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 1.
    
        CALL METHOD OF
            GS_EXCEL
            'Cells'  = GS_CELL2
          EXPORTING
            #1       = GV_LINE_CNTR
            #2       = 1.
    
        CALL METHOD OF
            GS_EXCEL
            'Range'  = GS_CELLS
          EXPORTING
            #1       = GS_CELL1
            #2       = GS_CELL2.
    
        CALL METHOD OF
            GS_CELLS
            'Select'.
    
        CALL METHOD OF
            GS_ACTIVESHEET
            'Paste'.
      ENDDO.
    
    *--Deallocating memory
      FREE:
      GS_EXCEL, GS_WBOOKLIST, GS_APPLICATION, GS_WBOOK,
      GS_ACTIVESHEET,GS_SHEETS, GS_NEWSHEET, GS_CELL1,
      GS_CELL2, GS_CELLS, GS_RANGE, GS_FONT, GS_INTERIOR,
      GS_COLUMNS, GS_CHARTS, GS_CHART, GS_CHARTTITLE,
      GS_CHARTTITLECHAR, GS_CHARTOBJECTS .
  • 相关阅读:
    ALV实时刷新功能的实现
    sap中批量导入Excel表格中的数据
    从se11新建的表维护中,给维护的数据做限制处理,例如,只允许输入vp开头的数据
    abap之ranges使用
    Abap中LOOP循环时使用AT FIRST. 传数过程中出现一串 ******** ------解决办法
    Django项目-创建第一个页面
    Python3创建django项目
    Python3安装Pyyaml
    Appium命令行环境搭建及参数使用
    c# ABP 中开启新的事务
  • 原文地址:https://www.cnblogs.com/rainysblog/p/11980416.html
Copyright © 2020-2023  润新知