2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)
一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能。
在项目一开始可以SE24创建一个类来供整体开发使用,或者直接复制代码到程序里来使用。
ZCHAR30000 这个字段给了excel每一行30000字符的限定。
- *&---------------------------------------------------------------------*
- *& 包含 ZBP_CREATE_CHANGE_CLS
- *&---------------------------------------------------------------------*
- CLASS cl_bc_excel DEFINITION.
- PUBLIC SECTION.
- TYPES:BEGIN OF ty_excel_tabline,
- row TYPE numc06,
- col TYPE numc06,
- value TYPE text4096,
- END OF ty_excel_tabline,
- ty_t_excel_tabline TYPE TABLE OF ty_excel_tabline.
- DATA lt_excel_tabline TYPE ty_t_excel_tabline.
- TYPES: zchar30000 TYPE c LENGTH ."每一行数据为30000字符 上限
- CLASS-METHODS f4_file_excel "获取 excel 路径
- IMPORTING
- VALUE(iv_window_title) TYPE string OPTIONAL
- VALUE(iv_file_filter) TYPE string OPTIONAL
- VALUE(iv_multiselection) TYPE char01 OPTIONAL
- EXPORTING
- !ev_rc TYPE i
- !et_file_table TYPE filetable
- CHANGING
- VALUE(cv_file_name) TYPE localfile .
- CLASS-METHODS download_web_object "下载对象 SMW0
- IMPORTING
- VALUE(iv_relid) TYPE indx_relid DEFAULT 'MI'
- VALUE(iv_objid) TYPE w3objid
- VALUE(iv_window_title) TYPE string OPTIONAL
- VALUE(iv_default_extension) TYPE string OPTIONAL
- VALUE(iv_file_filter) TYPE string OPTIONAL
- VALUE(iv_default_file_name) TYPE string OPTIONAL
- EXPORTING
- !ev_rc TYPE sy-subrc
- !ev_filepath TYPE string .
- CLASS-METHODS download_template "下载模板
- IMPORTING
- VALUE(name_of_template) TYPE char100
- VALUE(iv_relid) TYPE indx_relid DEFAULT 'MI'
- VALUE(iv_objid) TYPE w3objid
- EXPORTING
- VALUE(rv_filepath) TYPE string
- EXCEPTIONS
- download_error .
- CLASS-METHODS update_excel_ole "上载excel
- IMPORTING
- REFERENCE(pi_filename) TYPE string
- REFERENCE(pi_sheetname) TYPE string DEFAULT 'Sheet1'
- REFERENCE(pi_startline) TYPE i DEFAULT ''
- REFERENCE(pi_startcolumn) TYPE i DEFAULT ''
- REFERENCE(pi_every_copy_endline) TYPE i DEFAULT ''
- REFERENCE(pi_endcolumn) TYPE i DEFAULT ''
- REFERENCE(pi_skpcl_tbl) TYPE i DEFAULT ''
- CHANGING
- VALUE(pt_tab) TYPE ANY TABLE
- EXCEPTIONS
- open_file_err.
- CLASS-METHODS excel_2_inner_table "将excel 导入内表
- IMPORTING
- VALUE(pi_filename) TYPE string
- VALUE(pi_sheetname) TYPE string DEFAULT 'Sheet1'
- VALUE(pi_every_copy_endline) TYPE i DEFAULT ''
- VALUE(pi_endcolumn) TYPE i DEFAULT ''
- CHANGING
- VALUE(pt_tab) TYPE ANY TABLE
- EXCEPTIONS
- file_open_error
- protected section.
- CLASS-METHODS download_to_excel "下载内表到excel
- IMPORTING
- VALUE(sheet_name) TYPE char20 DEFAULT 'DATA'
- VALUE(excel_id) TYPE w3objid
- VALUE(path) TYPE localfile
- VALUE(excel_fname) TYPE char30
- VALUE(show_excel) TYPE char1 OPTIONAL
- EXPORTING
- VALUE(e_message) TYPE char100
- CHANGING
- VALUE(i_data) TYPE ty_t_excel_tabline
- EXCEPTIONS
- excel_error.
- PRIVATE SECTION.
- ENDCLASS.
- CLASS cl_bc_excel IMPLEMENTATION.
- * <SIGNATURE>---------------------------------------------------------------------------------------+
- * | Static Public Method ZCL_BC_EXCEL=>DOWNLOAD_TEMPLATE
- * +-------------------------------------------------------------------------------------------------+
- * | [--->] NAME_OF_TEMPLATE TYPE CHAR100
- * | [--->] IV_RELID TYPE INDX_RELID (default ='MI')
- * | [--->] IV_OBJID TYPE W3OBJID
- * | [<---] RV_FILEPATH TYPE STRING
- * | [EXC!] DOWNLOAD_ERROR
- * +--------------------------------------------------------------------------------------</SIGNATURE>
- METHOD download_template.
- * DATA: lv_objid TYPE wwwdatatab-objid VALUE 'ZMM004'.
- DATA: lv_default_file_name TYPE string.
- DATA: lv_rc TYPE sy-subrc.
- * DATA: lv_filepath TYPE string.
- CONCATENATE name_of_template '-' sy-datum+() sy-timlo+()
- INTO lv_default_file_name.
- CALL METHOD cl_bc_excel=>download_web_object
- EXPORTING
- iv_relid = iv_relid
- iv_objid = iv_objid
- iv_default_file_name = lv_default_file_name
- IMPORTING
- ev_rc = lv_rc
- ev_filepath = rv_filepath.
- IF lv_rc <> .
- RAISE download_error.
- ENDIF.
- ENDMETHOD.
- METHOD download_web_object.
- DATA: ls_key TYPE wwwdatatab,
- ls_wwwdata TYPE wwwdata,
- lv_filename TYPE string,
- lv_path TYPE string,
- lv_fullpath TYPE string,
- lv_extension TYPE c LENGTH ,
- lv_user_action TYPE i.
- DATA: lv_offset TYPE i,
- lv_length TYPE i.
- CLEAR ev_filepath.
- IF iv_relid IS INITIAL.
- SELECT SINGLE relid objid srtf2 checkout checknew chname tdate ttime text
- INTO CORRESPONDING FIELDS OF ls_wwwdata
- FROM wwwdata
- WHERE objid = iv_objid.
- iv_relid = ls_wwwdata-relid.
- ELSE.
- SELECT SINGLE relid objid srtf2 checkout checknew chname tdate ttime text
- INTO CORRESPONDING FIELDS OF ls_wwwdata
- FROM wwwdata
- WHERE relid = iv_relid AND objid = iv_objid.
- ENDIF.
- IF iv_window_title IS INITIAL.
- iv_window_title = '请选择文件存储路径...'().
- ENDIF.
- * IF iv_file_filter IS INITIAL.
- * iv_file_filter = '(*.xls)|*.xls'.
- * ENDIF.
- * IF iv_default_extension IS INITIAL.
- * iv_default_extension = '.xls'.
- * ENDIF.
- IF iv_default_extension IS INITIAL.
- CALL FUNCTION 'WWWPARAMS_READ'
- EXPORTING
- relid = ls_wwwdata-relid
- objid = ls_wwwdata-objid
- name = 'fileextension' "c_extension of include LSHTMTOP
- IMPORTING
- value = lv_extension
- EXCEPTIONS
- entry_not_exists =
- OTHERS = .
- IF sy-subrc <> .
- ENDIF.
- iv_default_extension = lv_extension.
- ENDIF.
- IF iv_file_filter IS INITIAL.
- iv_file_filter = '(*' && iv_default_extension && ')|*' && iv_default_extension.
- ENDIF.
- IF iv_default_file_name IS INITIAL.
- iv_default_file_name = ls_wwwdata-text.
- ELSE.
- WHILE iv_default_file_name CA './'.
- lv_offset = sy-fdpos.
- lv_length = lv_offset.
- lv_offset = lv_offset + .
- iv_default_file_name = iv_default_file_name+(lv_length) && iv_default_file_name+lv_offset.
- ENDWHILE.
- ENDIF.
- ls_key-relid = iv_relid.
- ls_key-objid = iv_objid.
- "File path of selection
- CALL METHOD cl_gui_frontend_services=>file_save_dialog
- EXPORTING
- window_title = iv_window_title
- default_extension = iv_default_extension
- default_file_name = iv_default_file_name
- file_filter = iv_file_filter
- CHANGING
- filename = lv_filename
- path = lv_path
- fullpath = lv_fullpath
- user_action = lv_user_action
- EXCEPTIONS
- cntl_error =
- error_no_gui =
- not_supported_by_gui =
- OTHERS = .
- IF sy-subrc <> .
- ev_rc = sy-subrc.
- RETURN.
- * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- IF lv_user_action <> .
- ev_rc = lv_user_action.
- RETURN.
- ENDIF.
- ev_filepath = lv_fullpath.
- "Download web object
- DATA: lv_destination TYPE rlgrap-filename.
- lv_destination = ev_filepath.
- CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
- EXPORTING
- key = ls_key
- destination = lv_destination
- IMPORTING
- rc = ev_rc
- CHANGING
- temp = lv_destination.
- ENDMETHOD.
- * <SIGNATURE>---------------------------------------------------------------------------------------+
- * | Static Public Method ZCL_BC_EXCEL=>F4_FILE_EXCEL
- * +-------------------------------------------------------------------------------------------------+
- * | [--->] IV_WINDOW_TITLE TYPE STRING(optional)
- * | [--->] IV_FILE_FILTER TYPE STRING(optional)
- * | [--->] IV_MULTISELECTION TYPE CHAR01(optional)
- * | [<---] EV_RC TYPE I
- * | [<---] ET_FILE_TABLE TYPE FILETABLE
- * | [<-->] CV_FILE_NAME TYPE LOCALFILE
- * +--------------------------------------------------------------------------------------</SIGNATURE>
- METHOD f4_file_excel.
- DATA: ls_file TYPE file_table,
- lv_len_s TYPE i,
- lv_len_d TYPE i.
- DATA: lv_default_filename TYPE string.
- IF iv_window_title IS INITIAL.
- iv_window_title = '请选择文件上传路径...'().
- ENDIF.
- IF iv_file_filter IS INITIAL.
- iv_file_filter = 'Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel 97-2003(*.xls)|*.xls'.
- ENDIF.
- lv_default_filename = cv_file_name.
- CALL METHOD cl_gui_frontend_services=>file_open_dialog
- EXPORTING
- window_title = iv_window_title
- * default_extension =
- default_filename = lv_default_filename
- file_filter = iv_file_filter
- * with_encoding =
- * initial_directory =
- multiselection = iv_multiselection
- CHANGING
- file_table = et_file_table
- rc = ev_rc
- * user_action =
- * file_encoding =
- EXCEPTIONS
- file_open_dialog_failed =
- cntl_error =
- error_no_gui =
- not_supported_by_gui =
- OTHERS = .
- IF sy-subrc <> .
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- IF ev_rc < .
- RETURN.
- ENDIF.
- READ TABLE et_file_table INTO ls_file INDEX .
- IF sy-subrc = .
- lv_len_s = strlen( ls_file-filename ).
- DESCRIBE FIELD cv_file_name LENGTH lv_len_d IN CHARACTER MODE.
- IF lv_len_s > lv_len_d.
- MESSAGE i398() WITH '文件路径太长'().
- RETURN.
- ENDIF.
- cv_file_name = ls_file-filename.
- ENDIF.
- ENDMETHOD.
- METHOD update_excel_ole.
- DATA:
- lt_tabc TYPE STANDARD TABLE OF zchar30000,
- lw_tabc TYPE zchar30000,
- lv_tabix TYPE sy-tabix,
- lt_cell TYPE STANDARD TABLE OF string,
- lw_cell TYPE string,
- lv_cell_tabix TYPE sy-tabix.
- DATA:
- lv_column_num TYPE i,
- lv_column_skp TYPE i,
- lw_tab_ref TYPE REF TO data.
- DATA:
- lo_cx_root TYPE REF TO cx_root.
- DATA:
- lv_message TYPE string.
- DATA
- descr_ref TYPE REF TO cl_abap_structdescr.
- FIELD-SYMBOLS:
- <lw_tab> TYPE any,
- <lv_value> TYPE any.
- CREATE DATA lw_tab_ref LIKE LINE OF pt_tab.
- ASSIGN lw_tab_ref->* TO <lw_tab>.
- lv_column_skp = pi_skpcl_tbl.
- CALL METHOD cl_bc_excel=>excel_2_inner_table
- EXPORTING
- pi_filename = pi_filename
- pi_sheetname = pi_sheetname
- pi_every_copy_endline = pi_every_copy_endline
- pi_endcolumn = pi_endcolumn
- CHANGING
- pt_tab = lt_tabc
- EXCEPTIONS
- file_open_error =
- OTHERS = .
- *->把数据切割到内表
- LOOP AT lt_tabc INTO lw_tabc.
- lv_tabix = sy-tabix.
- CHECK lv_tabix >= pi_startline.
- CLEAR lt_cell.
- SPLIT lw_tabc AT cl_abap_char_utilities=>horizontal_tab INTO TABLE lt_cell.
- LOOP AT lt_cell INTO lw_cell.
- lv_cell_tabix = sy-tabix.
- lv_column_num = lv_cell_tabix - pi_startcolumn + + lv_column_skp.
- CHECK lv_column_num > .
- ASSIGN COMPONENT lv_column_num OF STRUCTURE <lw_tab> TO <lv_value>.
- CHECK sy-subrc = .
- TRY.
- <lv_value> = lw_cell.
- CATCH cx_root INTO lo_cx_root.
- descr_ref ?= cl_abap_typedescr=>describe_by_data( pt_tab ).
- READ TABLE descr_ref->components INTO DATA(ls_name) INDEX lv_column_num.
- lv_message = lv_tabix && 'Lines' && lv_column_num && 'Name of column is ' && ls_name-name && 'error value:' && lw_cell.
- MESSAGE e001() WITH lv_tabix lv_column_num lv_message RAISING open_file_err.
- ENDTRY.
- ENDLOOP.
- IF <lw_tab> IS NOT INITIAL.
- INSERT <lw_tab> INTO TABLE pt_tab.
- CLEAR <lw_tab>.
- ENDIF.
- ENDLOOP.
- ENDMETHOD.
- METHOD excel_2_inner_table.
- TYPE-POOLS:
- ole2.
- DATA:
- ole_excel TYPE ole2_object,
- ole_workbooks TYPE ole2_object,
- ole_workbook TYPE ole2_object,
- ole_worksheets TYPE ole2_object,
- ole_worksheet TYPE ole2_object,
- ole_cell_begin TYPE ole2_object,
- ole_cell_end TYPE ole2_object,
- ole_range TYPE ole2_object.
- DATA:
- lv_subrc TYPE sy-subrc,
- lv_begin_col TYPE i,
- lv_end_col TYPE i,
- lv_begin_row TYPE i,
- lv_end_row TYPE i,
- lv_add_rows TYPE i VALUE .
- lv_add_rows = pi_every_copy_endline.
- DATA:
- lt_excel_tab TYPE STANDARD TABLE OF zchar30000,
- lw_excel_tab TYPE zchar30000,
- lw_excel_tab_tmp TYPE zchar30000.
- *->生成Excel object
- CREATE OBJECT ole_excel 'Excel.Application'.
- IF sy-subrc <> .
- MESSAGE e001(zbc) RAISING file_open_error.
- ENDIF.
- *->
- SET PROPERTY OF ole_excel 'Visible' = .
- GET PROPERTY OF ole_excel 'Workbooks' = ole_workbooks.
- CALL METHOD OF
- ole_workbooks
- 'Open' = ole_workbook
- EXPORTING
- # = pi_filename.
- *->取得Sheet
- GET PROPERTY OF ole_workbook 'Worksheets' = ole_worksheets
- EXPORTING
- # = pi_sheetname.
- IF sy-subrc = .
- CALL METHOD OF
- ole_worksheets
- 'Activate'.
- ELSE.
- CALL METHOD OF
- ole_excel
- 'QUIT'.
- MESSAGE e001() WITH 'error in open Sheet , please check Sheet name' RAISING file_open_error.
- ENDIF.
- *->把Sheet上数据Copy 到 ClipBoard
- lv_begin_col = .
- lv_end_col = pi_endcolumn.
- lv_begin_row = .
- lv_end_row = .
- WHILE lv_subrc IS INITIAL.
- IF lv_begin_row IS INITIAL.
- lv_begin_row = .
- lv_end_row = lv_add_rows.
- ELSE.
- lv_begin_row = lv_begin_row + lv_add_rows.
- lv_end_row = lv_end_row + lv_add_rows.
- ENDIF.
- CALL METHOD OF
- ole_worksheets
- 'Cells' = ole_cell_begin
- EXPORTING
- # = lv_begin_row
- # = lv_begin_col.
- CALL METHOD OF
- ole_worksheets
- 'Cells' = ole_cell_end
- EXPORTING
- # = lv_end_row
- # = lv_end_col.
- CALL METHOD OF
- ole_worksheets
- 'RANGE' = ole_range
- EXPORTING
- # = ole_cell_begin
- # = ole_cell_end.
- CALL METHOD OF
- ole_range
- 'SELECT'.
- IF sy-subrc <> .
- EXIT.
- ENDIF.
- CALL METHOD OF
- ole_range
- 'COPY'.
- * read clipboard into ABAP
- CALL METHOD cl_gui_frontend_services=>clipboard_import
- IMPORTING
- data = lt_excel_tab
- EXCEPTIONS
- cntl_error =
- error_no_gui =
- not_supported_by_gui =
- OTHERS = .
- IF sy-subrc <> .
- CALL METHOD OF
- ole_excel
- 'QUIT'.
- MESSAGE 'Error during import of clipboard contents' TYPE 'A'.
- ENDIF.
- lv_subrc = .
- LOOP AT lt_excel_tab INTO lw_excel_tab.
- lw_excel_tab_tmp = lw_excel_tab.
- REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN lw_excel_tab_tmp WITH space.
- IF NOT ( lw_excel_tab_tmp = space OR lw_excel_tab_tmp IS INITIAL ).
- INSERT lw_excel_tab INTO TABLE pt_tab.
- CLEAR lv_subrc.
- ENDIF.
- ENDLOOP.
- CLEAR lt_excel_tab.
- ENDWHILE.
- DATA:
- lv_rc TYPE i.
- CALL METHOD cl_gui_frontend_services=>clipboard_export
- IMPORTING
- data = lt_excel_tab
- CHANGING
- rc = lv_rc
- EXCEPTIONS
- cntl_error =
- * ERROR_NO_GUI = 2
- * NOT_SUPPORTED_BY_GUI = 3
- OTHERS = .
- * CALL METHOD OF
- * ole_worksheets
- * 'COLSE'.
- * CALL METHOD OF
- * ole_workbook
- * 'COLSE'.
- * CALL METHOD OF
- * ole_workbooks
- * 'CLOSE'.
- CALL METHOD OF
- ole_excel
- 'QUIT'.
- FREE OBJECT:
- ole_excel ,
- ole_workbooks ,
- ole_workbook ,
- ole_worksheets ,
- ole_worksheet ,
- ole_cell_begin ,
- ole_cell_end ,
- ole_range .
- ENDMETHOD.
- METHOD download_to_excel.
- DATA: g_excel TYPE ole2_object,
- g_workbookl TYPE ole2_object,
- g_workbook TYPE ole2_object,
- g_sheet TYPE ole2_object,
- g_cell TYPE ole2_object,
- g_cell1 TYPE ole2_object,
- g_range TYPE ole2_object.
- DATA: l_formkey TYPE wwwdatatab.
- DATA: l_excel_template_path TYPE localfile,
- l_excel_path TYPE localfile,
- l_data_path TYPE localfile.
- DATA: l_msg TYPE char128.
- * Download the excel template from server
- CONCATENATE 'MI' excel_id INTO l_formkey.
- CONCATENATE path '\' excel_fname '.XLT' INTO l_excel_template_path.
- REPLACE ALL OCCURRENCES OF '\\' IN l_excel_template_path WITH '\'.
- * PERFORM DOWNLOAD_TEMPLATE USING L_FORMKEY L_EXCEL_TEMPLATE_PATH .
- DATA: l_path TYPE localfile.
- CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
- EXPORTING
- key = l_formkey
- destination = l_excel_template_path
- CHANGING
- temp = l_path.
- * Create EXCEL application
- * PERFORM CREATE_APPLICATION CHANGING E_MESSAGE.
- DATA: l_indicator TYPE i VALUE 0.
- IF g_excel IS INITIAL.
- CREATE OBJECT g_excel 'EXCEL.APPLICATION'.
- ENDIF.
- * PERFORM err_hdl CHANGING e_message.
- IF sy-subrc NE 0.
- e_message = 'EXCEL操作没成功执行' .
- RAISE excel_error.
- ENDIF.
- SET PROPERTY OF g_excel 'Visible' = l_indicator.
- * PERFORM err_hdl CHANGING e_message.
- IF sy-subrc NE 0.
- e_message = 'EXCEL操作没成功执行' .
- RAISE excel_error.
- ENDIF.
- SET PROPERTY OF g_excel 'DisplayAlerts' = l_indicator.
- * Download to Excel indicator
- l_msg = '下载数据到EXCEL,请等待....'.
- * PERFORM progress_indicator USING l_msg.
- CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
- EXPORTING
- percentage = 0
- text = l_msg.
- * Download data to Front
- CONCATENATE path '\' excel_fname '.TXT' INTO l_data_path.
- REPLACE ALL OCCURRENCES OF '\\' IN l_data_path WITH '\'.
- * PERFORM download_data_file TABLES i_data USING l_data_path.
- SORT i_data BY row col.
- CALL FUNCTION 'GUI_DOWNLOAD'
- EXPORTING
- filename = l_data_path
- write_field_separator = cl_abap_char_utilities=>horizontal_tab
- codepage = ''
- TABLES
- data_tab = i_data.
- IF sy-subrc <> 0.
- ENDIF.
- CLEAR i_data[].
- * Open excel template
- * PERFORM open_excel_template USING l_excel_template_path
- * CHANGING e_message .
- CALL METHOD OF g_excel 'Workbooks' = g_workbookl.
- * PERFORM err_hdl CHANGING e_message.
- IF sy-subrc NE 0.
- e_message = 'EXCEL操作没成功执行' .
- RAISE excel_error.
- ENDIF.
- * OPen template file
- CALL METHOD OF g_workbookl 'Open' = g_workbook
- EXPORTING
- #1 = l_excel_template_path.
- IF sy-subrc NE 0.
- e_message = 'EXCEL操作没成功执行' .
- RAISE excel_error.
- ENDIF.
- * Open excel sheet
- * PERFORM open_excel_sheet USING sheet_name
- * CHANGING e_message.
- CALL METHOD OF g_workbook 'WORKSHEETS' = g_sheet
- EXPORTING
- #1 = sheet_name.
- IF sy-subrc NE 0.
- e_message = 'EXCEL操作没成功执行' .
- RAISE excel_error.
- ENDIF.
- CALL METHOD OF g_sheet 'ACTIVATE'.
- IF sy-subrc NE 0.
- e_message = 'EXCEL操作没成功执行' .
- RAISE excel_error.
- ENDIF.
- * Convert data file to excel
- * PERFORM run_macro_open_text USING l_data_path sheet_name.
- CALL METHOD OF g_excel 'RUN'
- EXPORTING
- #1 = 'Open_text'
- #2 = l_data_path
- #3 = sheet_name.
- * Save excel file
- CONCATENATE path '\' excel_fname '.XLS' INTO l_excel_path.
- REPLACE ALL OCCURRENCES OF '\\' IN l_excel_path WITH '\'.
- * PERFORM run_macro_save_excel USING l_excel_path.
- CALL METHOD OF g_excel 'RUN'
- EXPORTING
- #1 = 'Save_excel'
- #2 = l_excel_path.
- IF show_excel = 'X'.
- SET PROPERTY OF g_excel 'VISIBLE' = 1 NO FLUSH.
- ENDIF.
- * Close excel
- * PERFORM close_excel CHANGING show_excel.
- * Free objects
- IF show_excel = space.
- CALL METHOD OF g_excel 'Quit'.
- ENDIF.
- FREE OBJECT g_cell.
- FREE OBJECT g_cell1.
- FREE OBJECT g_range.
- FREE OBJECT g_sheet.
- FREE OBJECT g_workbook.
- FREE OBJECT g_workbookl.
- * force flush
- CALL FUNCTION 'FLUSH'
- EXCEPTIONS
- OTHERS = 0.
- * Delete data file & template file
- * PERFORM delete_file USING l_data_path.
- CALL FUNCTION 'GUI_DELETE_FILE'
- EXPORTING
- file_name = l_data_path
- EXCEPTIONS
- failed = 1
- OTHERS = 2.
- IF sy-subrc <> 0.
- * Implement suitable error handling here
- ENDIF.
- * PERFORM delete_file USING l_excel_template_path.
- CALL FUNCTION 'GUI_DELETE_FILE'
- EXPORTING
- file_name = l_excel_template_path
- EXCEPTIONS
- failed = 1
- OTHERS = 2.
- IF sy-subrc <> 0.
- * Implement suitable error handling here
- ENDIF.
- ENDMETHOD.
- ENDCLASS.
仅供参考
2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)的更多相关文章
- [.Net] C# Excel操作类 ExcelHelper
实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...
- C#EXCEL 操作类--C#ExcelHelper操作类
主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...
- Excel 操作类
转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...
- C#常用工具类——Excel操作类
/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...
- C# Excel操作类
/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...
- C#常用工具类——Excel操作类(ZT)
本文转载于: http://www.cnblogs.com/zfanlong1314/p/3916047.html /// 常用工具类——Excel操作类 /// <para> ----- ...
- C#封装的VSTO Excel操作类
自己在用的Excel操作类,因为经常在工作中要操作Excel文件,可是使用vba实现起来实在是不方便,而且编写也很困难,拼接一个字符串都看的眼花. 这个时候C#出现了,发现使用C#来操作Excel非常 ...
- C#自定义Excel操作类
C#自定义Excel操作类,可以用于将DataTable导出到Excel文件,从Excel文件读取数据. using System; using System.IO; using System.Dat ...
- C# Excel操作类 ExcelHelper
实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...
随机推荐
- 创建表空间 ora-01119
create tablespace user_data logging datafile 'D:\app\Administrator\oradata\orcl\ARCHIVE.dbf' size 50 ...
- Mybatis关联查询(转载)
原文地址: http://www.cnblogs.com/xiaolang8762400/p/7399892.html mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映 ...
- BZOJ2118 墨墨的等式[同余类最短路]
声明:关于这题的$O(mn)$尚且未深入理解,虽然之前有跟这位神仙聊过做法但并没太懂.. $O(mn\log m)$同余最短路做法: 首先不妨抽出最小的$a_i=m$,那么剩余的$a$如果可以表示出$ ...
- order-independent transparency & programmable blending
Yang, McKee - OIT and Indirect Shadows(SIGGRAPH 2010 Advanced RealTime Rendering Course).pptx 最近又发现了 ...
- @Value和@ConfigurationProperties
1.@Value用法 https://blog.csdn.net/u010832551/article/details/73826914 2.@ConfigurationProperties用法 ht ...
- 题解 POJ1149 Pigs
先翻译一下吧(题面可以在原OJ上找) Mirko在一个由M个锁着的猪舍组成的养猪场工作,Mirko无法解锁任何猪舍,因为他没有钥匙.客户纷纷来到农场.他们每个人都有一些猪舍的钥匙,并想购买一定数量的猪 ...
- apache nginx 配置
<VirtualHost *:80> ServerAdmin test@biuuu.com DocumentRoot E:\web\OTHER\test ServerName zjh.co ...
- Golang ioutil.ReadDir 读取目录下的内容并排序
之前写的https://www.cnblogs.com/pu369/p/10620731.html一文中,也有对slice的排序,但代码乱的自己也看不下去了. 参考https://blog.csdn. ...
- 51 Nod 1116 K进制下的大数
1116 K进制下的大数 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数 ...
- 征途堆积出友情的永恒「堆优化dp」
直接写题解: 很简单的dp暴力转移式子:f[i]=MAX{f[j]+max(tax[j],sum[i]-sum[j])} 观察式子,只有一个变量sum[i]; 而其他都为定量; 则考虑维护 两个定量: ...