OLE打印带颜色条纹的EXCEL

发布于:2025-09-12 ⋅ 阅读:(9) ⋅ 点赞:(0)

OLE打印就是打开一个excel然后把数据和对单元格的操作一行行写上去,如果程序执行,立刻打开excel有时甚至能看到一行行数据写入的过程

另一种打印方式是abap2excel 需要先下载对应的插件,本质是在sap中内置一个excel然后将数据写入,直接下载到桌面

OLE需要实现一些特别的功能时,都可以选择在excel中录制宏,再根据宏代码修改即可

在excel中点击录制宏,然后执行想要的操作

操作完需要的效果,点击结束宏,然后点查看

就可以看到这个宏对应的代码,根据下列代码改写成abap的部分即可

*&---------------------------------------------------------------------*
*& Form FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_PRINT_DATA .
 DATA: lv_object_id(20) TYPE c,  "模板名称
        lv_string     TYPE string,
        ls_key        TYPE wwwdatatab,
        lv_lines     TYPE numc2,
        LV_ROW       TYPE numc2,
*        LV_COLOR_YELLOW     TYPE int8 VALUE 65535,
*        LV_COLOR_ORANGE     TYPE int8 VALUE 49407,
*        LV_COLOR_GREEN      TYPE int8 VALUE 5287936,
        ThemeColor          TYPE INT4 VALUE 9,      "修改绿色为浅蓝
        TintAndShade        TYPE P LENGTH 13 DECIMALS 6 VALUE  '0.600000',
        lv_str2       TYPE c2 VALUE cl_abap_char_utilities=>cr_lf,
        lt_doc_tab    TYPE STANDARD TABLE OF w3mime,
        lc_fullpath    TYPE string  VALUE'D:\temp\',
        lc_path        TYPE  string VALUE'D:\temp\',
        ls_destination LIKE rlgrap-filename,
        lv_fill       TYPE string,
        lv_filename   TYPE rlgrap-filename,
        ls_objnam      TYPE string,
        li_rc          LIKE sy-subrc,
        lv_filename1   TYPE STRING,
        LV_TABIX       TYPE INT4,
        ls_errtxt      TYPE string.
  DATA: lv_file(255)  TYPE c.

  DATA lv_subrc TYPE sy-subrc.

  CLEAR lv_object_id.

  lv_object_id = 'ZHR024'.

  CALL METHOD cl_gui_frontend_services=>directory_browse
    CHANGING
      selected_folder      = lv_string.

* 写入到本地的地址
  lv_file     = lv_string && '\' && PN-BEGDA+(4) && '年' && PN-BEGDA+4(2) && '月' && '入职渠道分析报表' && sy-datum && sy-uzeit && '.xlsx'.
  lv_filename = lv_string && '\' && PN-BEGDA+(4) && '年' && PN-BEGDA+4(2) && '月' && '入职渠道分析报表' && sy-datum && sy-uzeit && '.xlsx'.

" 获取模板信息
  CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
     EXPORTING
       object_id        = lv_object_id
     TABLES
       data_table       = lt_doc_tab
     EXCEPTIONS
       object_not_found = 1
       internal_error   = 2
       OTHERS           = 3.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  SELECT SINGLE relid, objid FROM wwwdata INTO CORRESPONDING FIELDS OF @ls_key
             WHERE srtf2 = 0 AND relid = 'MI' AND objid = @lv_object_id.


  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = ls_key
      destination = lv_filename
    IMPORTING
      rc          = lv_subrc.


" 打开EXCEL
  CREATE OBJECT excel 'EXCEL.APPLICATION'.
  SET PROPERTY OF excel  'VISIBLE' = 1.
  CALL METHOD OF excel 'WORKBOOKS' = workbook.
  CALL METHOD OF workbook 'Open' "打开EXCEL
      EXPORTING
     #1 = lv_file.

  CALL METHOD OF
       excel
       'WORKSHEETS' = sheet
     EXPORTING
       #1           = 'Sheet1'. "EXCEL sheet页名称

  CALL METHOD OF sheet 'ACTIVATE'. "激活


  lv_lines = 3.

  LOOP AT GT_RESULT INTO GS_RESULT.

 IF SY-TABIX MOD 2 = 1 .  "从第三行开始的奇数行

    LV_TABIX = SY-TABIX + 2.
    PERFORM EXCEL_RANGE_COLOR1 USING SHEET LV_TABIX ThemeColor TintAndShade.

    ENDIF.


    "编号
    CLEAR lv_fill.
    lv_fill = GS_RESULT-ZZPQD.
    PERFORM fill_cell_data USING lv_lines 1 lv_fill.

    "部门
    CLEAR lv_fill.
    lv_fill = GS_RESULT-ZRS.
    PERFORM fill_cell_data USING lv_lines 2 lv_fill.

    "应发工资
    CLEAR lv_fill.
    lv_fill = GS_RESULT-ZZB.
    PERFORM fill_cell_data USING lv_lines 3 lv_fill.

    "实发工资
    CLEAR lv_fill.
    lv_fill = GS_RESULT-ZPM.
    PERFORM fill_cell_data USING lv_lines 4 lv_fill.

    lv_lines = lv_lines + 1.
    CLEAR:GS_RESULT.
    ENDLOOP.

ENDFORM.

  "将选中的区间范围单元格设置成传入的颜色   (因为这里单元格设置颜色是从某行的第一列的单元格到第18列的单元格)
FORM EXCEL_RANGE_COLOR1 USING lo_worksheet   "excel中的工作页
                             ROW            "行
                             ThemeColor
                             TintAndShade.        "颜色

 DATA:lo_cellstart TYPE ole2_object,
      lo_cellend   TYPE ole2_object,
      lo_range     TYPE ole2_object.

 DATA: lo_interior TYPE ole2_object.

* 1. 开始的单元格
CALL METHOD OF lo_worksheet 'Cells' = lo_cellstart
EXPORTING
#1 = ROW
#2 = 1.

* 2. 结束的单元格
CALL METHOD OF lo_worksheet 'Cells' = lo_cellend
EXPORTING
#1 = ROW
#2 = 4.

* 3.选择的单元格范围
CALL METHOD OF lo_worksheet 'RANGE' = lo_range
EXPORTING
#1 = lo_cellstart
#2 = lo_cellend.

CALL METHOD OF  lo_range 'Interior' = lo_interior.
 SET PROPERTY OF lo_interior 'ThemeColor' = ThemeColor.
  SET PROPERTY OF lo_interior 'TintAndShade' = TintAndShade.

FREE OBJECT lo_range.
  ENDFORM.
*&---------------------------------------------------------------------*
*& Form fill_cell_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_1
*&      --> P_4
*&      --> LV_FILL
*&---------------------------------------------------------------------*
FORM FILL_CELL_DATA  USING p_row                 "对单元格赋值,并且画边框
                            p_col
                            p_value.

  DATA: lo_borders TYPE ole2_object.

 CALL METHOD OF excel 'CELLS' = cell1
    EXPORTING
    #1 = p_row
    #2 = p_col.

*  CALL METHOD OF excel 'RANGE' = cell
*    EXPORTING #1 = 'a4'.
 SET PROPERTY OF cell1   'VALUE' = p_value.

 CALL METHOD OF cell1 'Borders' = lo_borders EXPORTING #1 = '7'. "xlEdgeLeft
  SET PROPERTY OF lo_borders 'LineStyle' = '1'. "xlContinuous

  CALL METHOD OF cell1 'Borders' = lo_borders EXPORTING #1 = '8'. "xlEdgeTop
  SET PROPERTY OF lo_borders 'LineStyle' = '1'. "xlContinuous

  CALL METHOD OF cell1 'Borders' = lo_borders EXPORTING #1 = '9'. "xlEdgeBottom
  SET PROPERTY OF lo_borders 'LineStyle' = '1'. "xlContinuous

  CALL METHOD OF cell1 'Borders' = lo_borders EXPORTING #1 = '10'. "xlEdgeRight
  SET PROPERTY OF lo_borders 'LineStyle' = '1'. "xlContinuous

* Increase the weight of the border if you want, in this case only for EdgeRight:
  SET PROPERTY OF lo_borders 'WEIGHT' = 2. "xlThick

  FREE OBJECT cell1.

ENDFORM.


网站公告

今日签到

点亮在社区的每一天
去签到