简单abap OLE实例
来源:互联网 发布:淘宝掌柜名字可以改吗 编辑:程序博客网 时间:2024/05/22 14:21
OLE分大致3步:
运行效果(只显示前五行数据):
1.SMW0上传模板到服务器
2.在程序中下载模板
3.下载完模板后,打开模板文件,填入数据
1.SMW0上传模板到服务器:不详细叙述
excel模板内容如下:
2.编程
*&---------------------------------------------------------------------**& Report ZLEARNING12_OLE_FIST*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT ZLEARNING12_OLE_FIST.INCLUDE OLE2INCL.*&---------------------------------------------------------------------**&内表和工作区声明*&---------------------------------------------------------------------*DATA: it_data TYPE TABLE OF MAKT WITH HEADER LINE, " wa_data LIKE LINE OF it_data. "DATA: workbook TYPE OLE2_OBJECT, excel TYPE ole2_object, sheet TYPE ole2_object, cell TYPE ole2_object.DATA: fname LIKE rlgrap-filename.DATA: index TYPE i.TABLES: MAKT.*&---------------------------------------------------------------------**&选择屏幕的定义*&---------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK blk0 WITH FRAME TITLE text-001.SELECT-OPTIONS: S_MATNR FOR MAKT-MATNR. "SELECT-OPTIONS: S_SPRAS FOR MAKT-SPRAS . "SELECTION-SCREEN END OF BLOCK blk0.*&---------------------------------------------------------------------**&INITIALIZATION*&---------------------------------------------------------------------**&---------------------------------------------------------------------**&选择屏幕事件*&---------------------------------------------------------------------**&---------------------------------------------------------------------**&START-OF-SELECTION 程序开始*&---------------------------------------------------------------------*START-OF-SELECTION. PERFORM temp_excel_get USING 'ZOLE3011' ."从服务器下载模板* 下载完模板后,打开模板文件,填入数据 PERFORM frm_excel_open.* &---------------------------------------------------------------------**取数放到it_data PERFORM frm_get_data.*将取出的数放入excel LOOP AT it_data INTO wa_data. index = sy-tabix + 2."从第三行开始写入数据* PERFORM excel_row_insert USING sheet index 1. PERFORM fill_range USING index 1 wa_data-MANDT. PERFORM fill_range USING index 2 wa_data-MATNR. PERFORM fill_range USING index 3 wa_data-SPRAS. PERFORM fill_range USING index 4 wa_data-MAKTX. PERFORM fill_range USING index 5 wa_data-MAKTG. ENDLOOP.*设置EXCEL中所插入的数据行边框线格式为黑色有边框* bod = tab.* CONDENSE bod NO-GAPS.* CONCATENATE 'A6:F' bod INTO bod.** PERFORM borderrange USING excel bod. PERFORM sub_excel_save."保存excel数据* PERFORM frm_data_display.**&---------------------------------------------------------------------***& END-OF-SELECTION 程序结束**&---------------------------------------------------------------------***&---------------------------------------------------------------------**&子程序部分*&---------------------------------------------------------------------**下载EXCEL模板FORM*----------------------------------------------------------------------** -->VALUE(templat) 上传的excel模板名* <--VALUE(ls_destination) 返回excel文件模板对象* *----------------------------------------------------------------------*FORM temp_excel_get USING template TYPE any. DATA: lo_objdata LIKE wwwdatatab, lo_mime LIKE w3mime, lc_filename TYPE string VALUE 'ole',"默认名 lc_fullpath TYPE string , "C:\Users\yang\Desktop\文件名 lc_path TYPE string , "C:\Users\yang\Desktop\ 不包括文件名 ls_destination LIKE rlgrap-filename, ls_objnam TYPE string, li_rc LIKE sy-subrc, ls_errtxt TYPE string. DATA:p_objid TYPE wwwdatatab-objid, p_dest LIKE sapb-sappfad.* p_objid = 'ZOLE3011'. "此处为EXCEL模板名称 p_objid = template. CONCATENATE lc_filename '_' SY-DATUM '_' SY-UZEIT INTO lc_filename. "给模板命名 CALL METHOD cl_gui_frontend_services=>file_save_dialog "调用保存对话框 EXPORTING default_extension = 'XLS' default_file_name = lc_filename CHANGING filename = lc_filename path = lc_path fullpath = lc_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF lc_fullpath = ''. MESSAGE '不能打开excel' TYPE 'E'. ENDIF. IF sy-subrc = 0. p_dest = lc_fullpath.* concatenate p_objid '.XLS' into ls_objnam. CONDENSE ls_objnam NO-GAPS. SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.*检查表wwwdata中是否存在所指定的模板文件 IF sy-subrc NE 0 OR lo_objdata-objid EQ space."如果不存在,则给出错误提示 CONCATENATE '模板文件' ls_objnam '不存在' INTO ls_errtxt. MESSAGE ls_errtxt TYPE 'I'. ENDIF. ls_destination = p_dest. "保存路径*如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下 CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = lo_objdata destination = ls_destination IMPORTING rc = li_rc. IF li_rc NE 0. CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt. MESSAGE ls_errtxt TYPE 'E'. ENDIF. fname = ls_destination. "fname 全局 ENDIF.ENDFORM. "fm_excel*&---------------------------------------------------------------------**& Form FRM_EXCEL_OPEN*&---------------------------------------------------------------------** 打开excel*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM FRM_EXCEL_OPEN . CLEAR: workbook,excel,sheet,cell,index. CREATE OBJECT excel 'EXCEL.APPLICATION'. "Create EXCEL OBJECT IF sy-subrc NE 0. EXIT. ENDIF. SET PROPERTY OF excel 'Visible' = 1. "1/0 是否立即显示EXCEL CALL METHOD OF excel 'Workbooks' = workbook. CALL METHOD OF workbook 'Open' EXPORTING #1 = fname."打开上面下载路径下的excel文件 CALL METHOD OF excel 'Sheets' = sheet EXPORTING #1 = 1. CALL METHOD OF sheet 'Select'. CALL METHOD OF sheet 'ACTIVATE'. "sheet 激活* SET PROPERTY OF sheet 'NAME' = sheetname. "设定sheet名称 SET PROPERTY OF sheet 'NAME' = 'SHEET1'.ENDFORM. " FRM_EXCEL_OPEN*&---------------------------------------------------------------------**& 向excel中的指定行插入N行*&---------------------------------------------------------------------*FORM excel_row_insert USING lcobj_sheet lc_row lc_count. DATA lc_range TYPE ole2_object. DATA h_borders TYPE ole2_object. DO lc_count TIMES. CALL METHOD OF lcobj_sheet 'Rows' = lc_range EXPORTING #1 = 6. CALL METHOD OF lc_range 'Copy'. "COPY第6行插入一个新行 CALL METHOD OF lcobj_sheet 'Rows' = lc_range EXPORTING #1 = lc_row. CALL METHOD OF lc_range 'Insert'. CALL METHOD OF lc_range 'ClearContents'. "是否需要清空Cell ENDDO.ENDFORM. "excel_row_insert*&---------------------------------------------------------------------**& Form fill_range*&---------------------------------------------------------------------** text 填充EXCEL 单元格*----------------------------------------------------------------------** -->VALUE(F_ROW) text* -->VALUE(F_COL) text* -->VALUE(F_VALUE) text*----------------------------------------------------------------------*FORM fill_range USING value(f_row) value(f_col) value(f_value). DATA: row TYPE i, col TYPE i. row = f_row. col = f_col. CALL METHOD OF excel 'CELLS' = cell EXPORTING #1 = row #2 = col. SET PROPERTY OF cell 'VALUE' = f_value.ENDFORM. "fill_range*&---------------------------------------------------------------------**& Form borderrange*&---------------------------------------------------------------------** text:设置EXCEL中所插入的数据行边框线格式*----------------------------------------------------------------------** -->LCOBJ_EXCEL text* -->RANGE text*----------------------------------------------------------------------*FORM borderrange USING lcobj_excel range . DATA: lc_cell TYPE ole2_object , lc_borders TYPE ole2_object . CALL METHOD OF lcobj_excel 'RANGE' = lc_cell EXPORTING #1 = range. DO 4 TIMES . CALL METHOD OF lc_cell 'BORDERS' = lc_borders EXPORTING #1 = sy-index. SET PROPERTY OF lc_borders 'LineStyle' = '1'. SET PROPERTY OF lc_borders 'WEIGHT' = 2. "4=max SET PROPERTY OF lc_borders 'ColorIndex' = '1'. ENDDO. FREE OBJECT lc_borders. FREE OBJECT lc_cell.ENDFORM. "borderrange*&---------------------------------------------------------------------**& Form FRM_GET_DATA*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM FRM_GET_DATA . CLEAR: it_data, wa_data. SELECT * FROM MAKT UP TO 5 ROWS INTO CORRESPONDING FIELDS OF TABLE it_data WHERE MAKT~MATNR IN s_matnr AND MAKT~spras IN S_SPRAS.ENDFORM. " FRM_GET_DATA*&---------------------------------------------------------------------**& Form sub_excel_save*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM sub_excel_save. GET PROPERTY OF excel 'ActiveSheet' = sheet. "获取活动SHEET FREE OBJECT sheet. FREE OBJECT workbook. GET PROPERTY OF excel 'ActiveWorkbook' = workbook. CALL METHOD OF workbook 'SAVE'. SET PROPERTY OF excel 'Visible' = 1. "是否显示EXCEL 此处显示不退出* SET PROPERTY OF excel 'Visible' = 1.* CALL METHOD OF workbook 'CLOSE'.* CALL METHOD OF excel 'QUIT'. 注释部分为不显示直接退出 FREE OBJECT sheet. FREE OBJECT workbook. FREE OBJECT excel.ENDFORM. "save_book
运行效果(只显示前五行数据):
0 0
- 简单abap OLE实例
- ABAP 简单的OLE操作
- ABAP - OLE excel download
- 当ABAP遇到OLE
- ABAP OLE COLOR
- ABAP面向对象事件处理-简单实例
- 简单的ABAP面相对象实例
- WebDynpro for ABAP 简单ALV实例
- 简单的屏幕开发实例-ABAP
- WebDynpro for ABAP 简单ALV实例
- WebDynpro for ABAP 简单ALV实例
- ABAP OLE相关的应用
- ABAP--通过OLE操作OFFICE(代码)
- ABAP--通过OLE操作OFFICE(代码)
- ABAP总结之六,OLE & DOI
- SAP ABAP OLE 操作EXCEL小结
- SAP ABAP OLE 操作EXCEL小结
- abap开发之ole(附代码)
- StringTokenizer实现
- proguard Missing type parameter
- VPS SPS PPS
- (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
- 数据存储(三):SharedPreferences
- 简单abap OLE实例
- 6. PHP 正则表达式
- Equation
- EditText常用属性
- Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例
- iOS应用性能调优的25个建议和技巧
- Swift 第十一课泛型
- 什么是软件生命周期模型,比较几个模型的优缺点
- touch事件