OLE 使用实例
report ztest16. *include ole2incl. include officeintegrationinclude. data: factory type ref to i_oi_document_factory. data: document type ref to i_oi_document_proxy. data: retcode type t_oi_ret_string. data: link_server type ref to i_oi_link_server. **定义对应EXCEL,workbook(工作簿),单元格, sheet(页), data: excel_obj type ole2_object, " Excel object book_obj type ole2_object, " list of workbooks cell_obj type ole2_object, " cell sheet_obj type ole2_object. "sheet data: is_closed type i. data: p_file type string. "Smwo 上载的文件名 data: doc_table like w3mime occurs 0. data: doc_size type i. data: doc_type(100) value soi_doctype_word97_document. data: doc_format(100) type c. start-of-selection. perform frm_init_factory. perform frm_output_excel. form frm_output_excel . ***将值写入EXcel perform frm_file_open. "打开Excel create object excel_obj 'EXCEL.APPLICATION'. set property of excel_obj 'Visible' = 1. call method of excel_obj 'Workbooks' = book_obj. call method of book_obj 'Open' exporting #1 = p_file. call method of excel_obj 'WORKSHEETS' = sheet_obj exporting #1 = 'Sheet1'. call method of sheet_obj 'ACTIVATE'. data: columns type i value 1, "列 rows type i value 4. "行 data value type i value 1000. do 80 times. add 1 to rows. columns = 1. do 12 times. add 1 to columns. perform frm_fill_cell using rows columns value. "进行Excel的填值操作 enddo. enddo. free object excel_obj. free object book_obj. free object sheet_obj. message 'Over' type 'S'. endform. " FRM_OUTPUT_EXCEL form frm_fill_cell using i j val. call method of excel_obj 'Cells' = cell_obj exporting #1 = i #2 = j. set property of cell_obj 'Value' = val . * get property of cell_obj 'Font' = h_f. endform. "FILL_CELL form frm_file_open . data: object_id(20) type c. clear object_id. *如果文件存在先删除 data: tmp_fcheck type c. data: rc type i, return type c. p_file = 'D:\现金流量表.xls'. tmp_fcheck = cl_gui_frontend_services=>file_exist( p_file ). if tmp_fcheck is not initial. call function 'TB_LIMIT_WS_FILE_DELETE' exporting filename = p_file importing return = return exceptions file_delete_failed = 1 cntl_error = 2 error_no_gui = 3 file_not_found = 4 access_denied = 5 unknown_error = 6 others = 7. if sy-subrc <> 0. message '请先关闭D:现金流量表.xls这个文件后,再执行这个报表!' type 'S'. stop. endif. endif. call function 'SAP_OI_LOAD_MIME_DATA' exporting object_id = 'ZFI001B' "文件名 SMW0 importing data_size = doc_size document_format = doc_format document_type = doc_type tables data_table = doc_table 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. if doc_size ne 0. call method factory->get_document_proxy exporting document_type = doc_type importing document_proxy = document retcode = retcode. call method c_oi_errors=>show_message exporting type = 'E'. call method document->play_document_from_table exporting document_table = doc_table[] document_size = doc_size no_flush = 'X' importing retcode = retcode. call method document->save_copy_as exporting file_name = 'D:\现金流量表.xls' no_flush = 'X' prompt_user = ' ' importing retcode = retcode. call method c_oi_errors=>show_message exporting type = 'E'. perform frm_close_doc. perform frm_close_factory. else. message 'No document selected' type 'E'. endif. endform. " FRM_FILE_OPEN form frm_close_doc . if not document is initial. call method document->is_destroyed importing ret_value = is_closed. if is_closed is initial. call method document->close_document exporting do_save = 'X' importing retcode = retcode. call method c_oi_errors=>show_message exporting type = 'E'. endif. call method document->release_document exporting no_flush = ' ' importing retcode = retcode. free document. endif. endform. " FRM_CLOSE_DOC form frm_close_factory . if not link_server is initial. call method link_server->stop_link_server importing retcode = retcode. free link_server. endif. * if not factory is initial. call method factory->stop_factory importing retcode = retcode. free factory. endif. endform. " FRM_CLOSE_FACTORY form frm_init_factory . if factory is initial. call method c_oi_factory_creator=>get_document_factory importing factory = factory retcode = retcode. if retcode ne c_oi_errors=>ret_ok. exit. endif. call method factory->start_factory exporting r3_application_name = sy-sysid importing retcode = retcode. call method c_oi_errors=>show_message exporting type = 'E'. call method factory->get_link_server importing link_server = link_server retcode = retcode. call method c_oi_errors=>show_message exporting type = 'W'. call method link_server->start_link_server importing retcode = retcode. call method c_oi_errors=>show_message exporting type = 'W'. else. call method link_server->stop_link_server importing retcode = retcode. endif. "factory IS INITIAL. endform. " FRM_INIT_FACTORY
abap菜鸟,记录学习笔记。才疏学浅,如有错误,请直接在评论区留言。