SAP ABAP OLE操作EXCEL小结_sap导出excel格式设置
SAP ABAP OLE操作EXCEL小结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“sap导出excel格式设置”。
ABAP直接操作EXCEL实现数据处理。这里是用OLE实现操作EXCEL的。现在还有 DOI操作EXCEL等方法。以后用到再做介绍。此处不是直接生成EXCEL文件,而是从 服务器已经上传的EXCEL模板中下载模板然后打开修改实现数据保存。也可以直接创建 新的EXCEL文件往里面传递数据并设置格式。这里不做介绍。
1.采用模板文件实现。上传EXCEL模板 T-code:SMW0
注意选择的是binary data(对于EXCEL模版上传)如果是HTML上传,对于存于www.daodoc.comtl_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.ENDIF.ENDFORM.“fm_excel
3.下载完模板后,打开模板文件,填入数据 DATA: EXCEL TYPE ole2_object, WORKBOOK TYPE ole2_object, SHEET TYPE ole2_object.CREATE OBJECT excel 'EXCEL.APPLICATION'.”Create EXCEL OBJECT IF sy-subrc NE 0.EXIT.ENDIF.SET PROPERTY OF excel 'Visible' = 0.“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 激活 DATA SHEETNAME TYPE STRING.SHEETNAME = 'TESTTESTTEST'.SET PROPERTY OF sheet 'NAME' = sheetname.“设定sheet名称 *此处假设内表itab 中已经存在需要写入excel中的数据 *并且假如从模板的第7行开始插入数据 DATA ITAB LIKE STANDARD TABLE OF SFLIGHT.DATA WA LIKE SFLIGHT.DATA: TAB TYPE I,BOD(5)TYPE C.SELECT * INTO TABLE ITAB FROM SFLIGHT UP TO 8 ROWS.LOOP AT itab INTO wa.tab = sy-tabix + 6.*在excel中插入一行
PERFORM excel_row_insert USING sheet tab 1.*填充所插入行的每个单元格的数据
PERFORM fill_range USING tab 1 wa-t01.PERFORM fill_range USING tab 2 wa-t02.PERFORM fill_range USING tab 3 wa-t03.PERFORM fill_range USING tab 4 wa-t04.PERFORM fill_range USING tab 5 wa-t05.PERFORM fill_range USING tab 6 wa-t06.ENDLOOP.*设置EXCEL中所插入的数据行边框线格式为黑色有边框
bod = tab.CONDENSE bod NO-GAPS.CONCATENATE 'A6:F' bod INTO bod.PERFORM borderrange USING excel bod.PERFORM sub_excel_save.“保存excel数据
*&-------* *& 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
*&-------* *& 向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
暂时只用到了这么多,还有ABAP设置EXCEL字体,对齐方式等功能。什么时候用到了再 做研究。希望对大家有所帮助。