一般使用标准的excel导入方法9999行,修改了标准的excel导入FM 整合出类:excel的 模板下载,excel上传,ALV内表下载功能。

在项目一开始可以SE24创建一个类来供整体开发使用,或者直接复制代码到程序里来使用。

ZCHAR30000 这个字段给了excel每一行30000字符的限定。

  1. *&---------------------------------------------------------------------*
  2. *& 包含 ZBP_CREATE_CHANGE_CLS
  3. *&---------------------------------------------------------------------*
  4. CLASS cl_bc_excel DEFINITION.
  5.  
  6. PUBLIC SECTION.
  7. TYPES:BEGIN OF ty_excel_tabline,
  8. row TYPE numc06,
  9. col TYPE numc06,
  10. value TYPE text4096,
  11. END OF ty_excel_tabline,
  12. ty_t_excel_tabline TYPE TABLE OF ty_excel_tabline.
  13. DATA lt_excel_tabline TYPE ty_t_excel_tabline.
  14. TYPES: zchar30000 TYPE c LENGTH ."每一行数据为30000字符 上限
  15.  
  16. CLASS-METHODS f4_file_excel "获取 excel 路径
  17. IMPORTING
  18. VALUE(iv_window_title) TYPE string OPTIONAL
  19. VALUE(iv_file_filter) TYPE string OPTIONAL
  20. VALUE(iv_multiselection) TYPE char01 OPTIONAL
  21. EXPORTING
  22. !ev_rc TYPE i
  23. !et_file_table TYPE filetable
  24. CHANGING
  25. VALUE(cv_file_name) TYPE localfile .
  26. CLASS-METHODS download_web_object "下载对象 SMW0
  27. IMPORTING
  28. VALUE(iv_relid) TYPE indx_relid DEFAULT 'MI'
  29. VALUE(iv_objid) TYPE w3objid
  30. VALUE(iv_window_title) TYPE string OPTIONAL
  31. VALUE(iv_default_extension) TYPE string OPTIONAL
  32. VALUE(iv_file_filter) TYPE string OPTIONAL
  33. VALUE(iv_default_file_name) TYPE string OPTIONAL
  34. EXPORTING
  35. !ev_rc TYPE sy-subrc
  36. !ev_filepath TYPE string .
  37. CLASS-METHODS download_template "下载模板
  38. IMPORTING
  39. VALUE(name_of_template) TYPE char100
  40. VALUE(iv_relid) TYPE indx_relid DEFAULT 'MI'
  41. VALUE(iv_objid) TYPE w3objid
  42. EXPORTING
  43. VALUE(rv_filepath) TYPE string
  44. EXCEPTIONS
  45. download_error .
  46.  
  47. CLASS-METHODS update_excel_ole "上载excel
  48. IMPORTING
  49. REFERENCE(pi_filename) TYPE string
  50. REFERENCE(pi_sheetname) TYPE string DEFAULT 'Sheet1'
  51. REFERENCE(pi_startline) TYPE i DEFAULT ''
  52. REFERENCE(pi_startcolumn) TYPE i DEFAULT ''
  53. REFERENCE(pi_every_copy_endline) TYPE i DEFAULT ''
  54. REFERENCE(pi_endcolumn) TYPE i DEFAULT ''
  55. REFERENCE(pi_skpcl_tbl) TYPE i DEFAULT ''
  56. CHANGING
  57. VALUE(pt_tab) TYPE ANY TABLE
  58. EXCEPTIONS
  59. open_file_err.
  60.  
  61. CLASS-METHODS excel_2_inner_table "excel 导入内表
  62. IMPORTING
  63. VALUE(pi_filename) TYPE string
  64. VALUE(pi_sheetname) TYPE string DEFAULT 'Sheet1'
  65. VALUE(pi_every_copy_endline) TYPE i DEFAULT ''
  66. VALUE(pi_endcolumn) TYPE i DEFAULT ''
  67. CHANGING
  68. VALUE(pt_tab) TYPE ANY TABLE
  69. EXCEPTIONS
  70. file_open_error
  71. protected section.
  72.  
  73. CLASS-METHODS download_to_excel "下载内表到excel
  74. IMPORTING
  75. VALUE(sheet_name) TYPE char20 DEFAULT 'DATA'
  76. VALUE(excel_id) TYPE w3objid
  77. VALUE(path) TYPE localfile
  78. VALUE(excel_fname) TYPE char30
  79. VALUE(show_excel) TYPE char1 OPTIONAL
  80. EXPORTING
  81. VALUE(e_message) TYPE char100
  82. CHANGING
  83. VALUE(i_data) TYPE ty_t_excel_tabline
  84. EXCEPTIONS
  85. excel_error.
  86.  
  87. PRIVATE SECTION.
  88.  
  89. ENDCLASS.
  90.  
  91. CLASS cl_bc_excel IMPLEMENTATION.
  92.  
  93. * <SIGNATURE>---------------------------------------------------------------------------------------+
  94. * | Static Public Method ZCL_BC_EXCEL=>DOWNLOAD_TEMPLATE
  95. * +-------------------------------------------------------------------------------------------------+
  96. * | [--->] NAME_OF_TEMPLATE TYPE CHAR100
  97. * | [--->] IV_RELID TYPE INDX_RELID (default ='MI')
  98. * | [--->] IV_OBJID TYPE W3OBJID
  99. * | [<---] RV_FILEPATH TYPE STRING
  100. * | [EXC!] DOWNLOAD_ERROR
  101. * +--------------------------------------------------------------------------------------</SIGNATURE>
  102. METHOD download_template.
  103. * DATA: lv_objid TYPE wwwdatatab-objid VALUE 'ZMM004'.
  104. DATA: lv_default_file_name TYPE string.
  105. DATA: lv_rc TYPE sy-subrc.
  106. * DATA: lv_filepath TYPE string.
  107.  
  108. CONCATENATE name_of_template '-' sy-datum+() sy-timlo+()
  109. INTO lv_default_file_name.
  110.  
  111. CALL METHOD cl_bc_excel=>download_web_object
  112. EXPORTING
  113. iv_relid = iv_relid
  114. iv_objid = iv_objid
  115. iv_default_file_name = lv_default_file_name
  116. IMPORTING
  117. ev_rc = lv_rc
  118. ev_filepath = rv_filepath.
  119. IF lv_rc <> .
  120. RAISE download_error.
  121. ENDIF.
  122. ENDMETHOD.
  123.  
  124. METHOD download_web_object.
  125. DATA: ls_key TYPE wwwdatatab,
  126. ls_wwwdata TYPE wwwdata,
  127. lv_filename TYPE string,
  128. lv_path TYPE string,
  129. lv_fullpath TYPE string,
  130. lv_extension TYPE c LENGTH ,
  131. lv_user_action TYPE i.
  132. DATA: lv_offset TYPE i,
  133. lv_length TYPE i.
  134. CLEAR ev_filepath.
  135. IF iv_relid IS INITIAL.
  136. SELECT SINGLE relid objid srtf2 checkout checknew chname tdate ttime text
  137. INTO CORRESPONDING FIELDS OF ls_wwwdata
  138. FROM wwwdata
  139. WHERE objid = iv_objid.
  140. iv_relid = ls_wwwdata-relid.
  141. ELSE.
  142. SELECT SINGLE relid objid srtf2 checkout checknew chname tdate ttime text
  143. INTO CORRESPONDING FIELDS OF ls_wwwdata
  144. FROM wwwdata
  145. WHERE relid = iv_relid AND objid = iv_objid.
  146. ENDIF.
  147. IF iv_window_title IS INITIAL.
  148. iv_window_title = '请选择文件存储路径...'().
  149. ENDIF.
  150. * IF iv_file_filter IS INITIAL.
  151. * iv_file_filter = '(*.xls)|*.xls'.
  152. * ENDIF.
  153. * IF iv_default_extension IS INITIAL.
  154. * iv_default_extension = '.xls'.
  155. * ENDIF.
  156. IF iv_default_extension IS INITIAL.
  157. CALL FUNCTION 'WWWPARAMS_READ'
  158. EXPORTING
  159. relid = ls_wwwdata-relid
  160. objid = ls_wwwdata-objid
  161. name = 'fileextension' "c_extension of include LSHTMTOP
  162. IMPORTING
  163. value = lv_extension
  164. EXCEPTIONS
  165. entry_not_exists =
  166. OTHERS = .
  167. IF sy-subrc <> .
  168. ENDIF.
  169. iv_default_extension = lv_extension.
  170. ENDIF.
  171. IF iv_file_filter IS INITIAL.
  172. iv_file_filter = '(*' && iv_default_extension && ')|*' && iv_default_extension.
  173. ENDIF.
  174. IF iv_default_file_name IS INITIAL.
  175. iv_default_file_name = ls_wwwdata-text.
  176. ELSE.
  177. WHILE iv_default_file_name CA './'.
  178. lv_offset = sy-fdpos.
  179. lv_length = lv_offset.
  180. lv_offset = lv_offset + .
  181. iv_default_file_name = iv_default_file_name+(lv_length) && iv_default_file_name+lv_offset.
  182. ENDWHILE.
  183. ENDIF.
  184.  
  185. ls_key-relid = iv_relid.
  186. ls_key-objid = iv_objid.
  187. "File path of selection
  188. CALL METHOD cl_gui_frontend_services=>file_save_dialog
  189. EXPORTING
  190. window_title = iv_window_title
  191. default_extension = iv_default_extension
  192. default_file_name = iv_default_file_name
  193. file_filter = iv_file_filter
  194. CHANGING
  195. filename = lv_filename
  196. path = lv_path
  197. fullpath = lv_fullpath
  198. user_action = lv_user_action
  199. EXCEPTIONS
  200. cntl_error =
  201. error_no_gui =
  202. not_supported_by_gui =
  203. OTHERS = .
  204. IF sy-subrc <> .
  205. ev_rc = sy-subrc.
  206. RETURN.
  207. * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  208. * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  209. ENDIF.
  210. IF lv_user_action <> .
  211. ev_rc = lv_user_action.
  212. RETURN.
  213. ENDIF.
  214.  
  215. ev_filepath = lv_fullpath.
  216. "Download web object
  217. DATA: lv_destination TYPE rlgrap-filename.
  218. lv_destination = ev_filepath.
  219. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
  220. EXPORTING
  221. key = ls_key
  222. destination = lv_destination
  223. IMPORTING
  224. rc = ev_rc
  225. CHANGING
  226. temp = lv_destination.
  227. ENDMETHOD.
  228.  
  229. * <SIGNATURE>---------------------------------------------------------------------------------------+
  230. * | Static Public Method ZCL_BC_EXCEL=>F4_FILE_EXCEL
  231. * +-------------------------------------------------------------------------------------------------+
  232. * | [--->] IV_WINDOW_TITLE TYPE STRING(optional)
  233. * | [--->] IV_FILE_FILTER TYPE STRING(optional)
  234. * | [--->] IV_MULTISELECTION TYPE CHAR01(optional)
  235. * | [<---] EV_RC TYPE I
  236. * | [<---] ET_FILE_TABLE TYPE FILETABLE
  237. * | [<-->] CV_FILE_NAME TYPE LOCALFILE
  238. * +--------------------------------------------------------------------------------------</SIGNATURE>
  239. METHOD f4_file_excel.
  240. DATA: ls_file TYPE file_table,
  241. lv_len_s TYPE i,
  242. lv_len_d TYPE i.
  243. DATA: lv_default_filename TYPE string.
  244. IF iv_window_title IS INITIAL.
  245. iv_window_title = '请选择文件上传路径...'().
  246. ENDIF.
  247. IF iv_file_filter IS INITIAL.
  248. iv_file_filter = 'Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel 97-2003(*.xls)|*.xls'.
  249. ENDIF.
  250. lv_default_filename = cv_file_name.
  251.  
  252. CALL METHOD cl_gui_frontend_services=>file_open_dialog
  253. EXPORTING
  254. window_title = iv_window_title
  255. * default_extension =
  256. default_filename = lv_default_filename
  257. file_filter = iv_file_filter
  258. * with_encoding =
  259. * initial_directory =
  260. multiselection = iv_multiselection
  261. CHANGING
  262. file_table = et_file_table
  263. rc = ev_rc
  264. * user_action =
  265. * file_encoding =
  266. EXCEPTIONS
  267. file_open_dialog_failed =
  268. cntl_error =
  269. error_no_gui =
  270. not_supported_by_gui =
  271. OTHERS = .
  272. IF sy-subrc <> .
  273. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  274. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  275. ENDIF.
  276.  
  277. IF ev_rc < .
  278. RETURN.
  279. ENDIF.
  280. READ TABLE et_file_table INTO ls_file INDEX .
  281. IF sy-subrc = .
  282. lv_len_s = strlen( ls_file-filename ).
  283. DESCRIBE FIELD cv_file_name LENGTH lv_len_d IN CHARACTER MODE.
  284. IF lv_len_s > lv_len_d.
  285. MESSAGE i398() WITH '文件路径太长'().
  286. RETURN.
  287. ENDIF.
  288. cv_file_name = ls_file-filename.
  289. ENDIF.
  290. ENDMETHOD.
  291.  
  292. METHOD update_excel_ole.
  293. DATA:
  294. lt_tabc TYPE STANDARD TABLE OF zchar30000,
  295. lw_tabc TYPE zchar30000,
  296. lv_tabix TYPE sy-tabix,
  297. lt_cell TYPE STANDARD TABLE OF string,
  298. lw_cell TYPE string,
  299. lv_cell_tabix TYPE sy-tabix.
  300.  
  301. DATA:
  302. lv_column_num TYPE i,
  303. lv_column_skp TYPE i,
  304. lw_tab_ref TYPE REF TO data.
  305.  
  306. DATA:
  307. lo_cx_root TYPE REF TO cx_root.
  308. DATA:
  309. lv_message TYPE string.
  310. DATA
  311. descr_ref TYPE REF TO cl_abap_structdescr.
  312.  
  313. FIELD-SYMBOLS:
  314. <lw_tab> TYPE any,
  315. <lv_value> TYPE any.
  316.  
  317. CREATE DATA lw_tab_ref LIKE LINE OF pt_tab.
  318. ASSIGN lw_tab_ref->* TO <lw_tab>.
  319.  
  320. lv_column_skp = pi_skpcl_tbl.
  321.  
  322. CALL METHOD cl_bc_excel=>excel_2_inner_table
  323. EXPORTING
  324. pi_filename = pi_filename
  325. pi_sheetname = pi_sheetname
  326. pi_every_copy_endline = pi_every_copy_endline
  327. pi_endcolumn = pi_endcolumn
  328. CHANGING
  329. pt_tab = lt_tabc
  330. EXCEPTIONS
  331. file_open_error =
  332. OTHERS = .
  333.  
  334. *->把数据切割到内表
  335. LOOP AT lt_tabc INTO lw_tabc.
  336. lv_tabix = sy-tabix.
  337.  
  338. CHECK lv_tabix >= pi_startline.
  339. CLEAR lt_cell.
  340.  
  341. SPLIT lw_tabc AT cl_abap_char_utilities=>horizontal_tab INTO TABLE lt_cell.
  342.  
  343. LOOP AT lt_cell INTO lw_cell.
  344. lv_cell_tabix = sy-tabix.
  345.  
  346. lv_column_num = lv_cell_tabix - pi_startcolumn + + lv_column_skp.
  347.  
  348. CHECK lv_column_num > .
  349.  
  350. ASSIGN COMPONENT lv_column_num OF STRUCTURE <lw_tab> TO <lv_value>.
  351. CHECK sy-subrc = .
  352. TRY.
  353. <lv_value> = lw_cell.
  354. CATCH cx_root INTO lo_cx_root.
  355. descr_ref ?= cl_abap_typedescr=>describe_by_data( pt_tab ).
  356. READ TABLE descr_ref->components INTO DATA(ls_name) INDEX lv_column_num.
  357. lv_message = lv_tabix && 'Lines' && lv_column_num && 'Name of column is ' && ls_name-name && 'error value:' && lw_cell.
  358. MESSAGE e001() WITH lv_tabix lv_column_num lv_message RAISING open_file_err.
  359. ENDTRY.
  360. ENDLOOP.
  361. IF <lw_tab> IS NOT INITIAL.
  362. INSERT <lw_tab> INTO TABLE pt_tab.
  363. CLEAR <lw_tab>.
  364. ENDIF.
  365.  
  366. ENDLOOP.
  367.  
  368. ENDMETHOD.
  369.  
  370. METHOD excel_2_inner_table.
  371. TYPE-POOLS:
  372. ole2.
  373.  
  374. DATA:
  375. ole_excel TYPE ole2_object,
  376. ole_workbooks TYPE ole2_object,
  377. ole_workbook TYPE ole2_object,
  378. ole_worksheets TYPE ole2_object,
  379. ole_worksheet TYPE ole2_object,
  380. ole_cell_begin TYPE ole2_object,
  381. ole_cell_end TYPE ole2_object,
  382. ole_range TYPE ole2_object.
  383.  
  384. DATA:
  385. lv_subrc TYPE sy-subrc,
  386. lv_begin_col TYPE i,
  387. lv_end_col TYPE i,
  388. lv_begin_row TYPE i,
  389. lv_end_row TYPE i,
  390. lv_add_rows TYPE i VALUE .
  391.  
  392. lv_add_rows = pi_every_copy_endline.
  393.  
  394. DATA:
  395. lt_excel_tab TYPE STANDARD TABLE OF zchar30000,
  396. lw_excel_tab TYPE zchar30000,
  397. lw_excel_tab_tmp TYPE zchar30000.
  398.  
  399. *->生成Excel object
  400. CREATE OBJECT ole_excel 'Excel.Application'.
  401. IF sy-subrc <> .
  402. MESSAGE e001(zbc) RAISING file_open_error.
  403. ENDIF.
  404.  
  405. *->
  406. SET PROPERTY OF ole_excel 'Visible' = .
  407.  
  408. GET PROPERTY OF ole_excel 'Workbooks' = ole_workbooks.
  409.  
  410. CALL METHOD OF
  411. ole_workbooks
  412. 'Open' = ole_workbook
  413. EXPORTING
  414. # = pi_filename.
  415.  
  416. *->取得Sheet
  417. GET PROPERTY OF ole_workbook 'Worksheets' = ole_worksheets
  418. EXPORTING
  419. # = pi_sheetname.
  420.  
  421. IF sy-subrc = .
  422. CALL METHOD OF
  423. ole_worksheets
  424. 'Activate'.
  425. ELSE.
  426. CALL METHOD OF
  427. ole_excel
  428. 'QUIT'.
  429. MESSAGE e001() WITH 'error in open Sheet , please check Sheet name' RAISING file_open_error.
  430. ENDIF.
  431.  
  432. *->把Sheet上数据Copy ClipBoard
  433. lv_begin_col = .
  434. lv_end_col = pi_endcolumn.
  435. lv_begin_row = .
  436. lv_end_row = .
  437.  
  438. WHILE lv_subrc IS INITIAL.
  439.  
  440. IF lv_begin_row IS INITIAL.
  441. lv_begin_row = .
  442. lv_end_row = lv_add_rows.
  443. ELSE.
  444. lv_begin_row = lv_begin_row + lv_add_rows.
  445. lv_end_row = lv_end_row + lv_add_rows.
  446. ENDIF.
  447.  
  448. CALL METHOD OF
  449. ole_worksheets
  450. 'Cells' = ole_cell_begin
  451. EXPORTING
  452. # = lv_begin_row
  453. # = lv_begin_col.
  454.  
  455. CALL METHOD OF
  456. ole_worksheets
  457. 'Cells' = ole_cell_end
  458. EXPORTING
  459. # = lv_end_row
  460. # = lv_end_col.
  461.  
  462. CALL METHOD OF
  463. ole_worksheets
  464. 'RANGE' = ole_range
  465. EXPORTING
  466. # = ole_cell_begin
  467. # = ole_cell_end.
  468.  
  469. CALL METHOD OF
  470. ole_range
  471. 'SELECT'.
  472. IF sy-subrc <> .
  473. EXIT.
  474. ENDIF.
  475.  
  476. CALL METHOD OF
  477. ole_range
  478. 'COPY'.
  479.  
  480. * read clipboard into ABAP
  481. CALL METHOD cl_gui_frontend_services=>clipboard_import
  482. IMPORTING
  483. data = lt_excel_tab
  484. EXCEPTIONS
  485. cntl_error =
  486. error_no_gui =
  487. not_supported_by_gui =
  488. OTHERS = .
  489. IF sy-subrc <> .
  490. CALL METHOD OF
  491. ole_excel
  492. 'QUIT'.
  493. MESSAGE 'Error during import of clipboard contents' TYPE 'A'.
  494. ENDIF.
  495.  
  496. lv_subrc = .
  497. LOOP AT lt_excel_tab INTO lw_excel_tab.
  498. lw_excel_tab_tmp = lw_excel_tab.
  499. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN lw_excel_tab_tmp WITH space.
  500. IF NOT ( lw_excel_tab_tmp = space OR lw_excel_tab_tmp IS INITIAL ).
  501. INSERT lw_excel_tab INTO TABLE pt_tab.
  502. CLEAR lv_subrc.
  503. ENDIF.
  504. ENDLOOP.
  505.  
  506. CLEAR lt_excel_tab.
  507.  
  508. ENDWHILE.
  509.  
  510. DATA:
  511. lv_rc TYPE i.
  512. CALL METHOD cl_gui_frontend_services=>clipboard_export
  513. IMPORTING
  514. data = lt_excel_tab
  515. CHANGING
  516. rc = lv_rc
  517. EXCEPTIONS
  518. cntl_error =
  519. * ERROR_NO_GUI = 2
  520. * NOT_SUPPORTED_BY_GUI = 3
  521. OTHERS = .
  522.  
  523. * CALL METHOD OF
  524. * ole_worksheets
  525. * 'COLSE'.
  526.  
  527. * CALL METHOD OF
  528. * ole_workbook
  529. * 'COLSE'.
  530.  
  531. * CALL METHOD OF
  532. * ole_workbooks
  533. * 'CLOSE'.
  534.  
  535. CALL METHOD OF
  536. ole_excel
  537. 'QUIT'.
  538. FREE OBJECT:
  539. ole_excel ,
  540. ole_workbooks ,
  541. ole_workbook ,
  542. ole_worksheets ,
  543. ole_worksheet ,
  544. ole_cell_begin ,
  545. ole_cell_end ,
  546. ole_range .
  547. ENDMETHOD.
  548.  
  549. METHOD download_to_excel.
  550.  
  551. DATA: g_excel TYPE ole2_object,
  552. g_workbookl TYPE ole2_object,
  553. g_workbook TYPE ole2_object,
  554. g_sheet TYPE ole2_object,
  555. g_cell TYPE ole2_object,
  556. g_cell1 TYPE ole2_object,
  557. g_range TYPE ole2_object.
  558.  
  559. DATA: l_formkey TYPE wwwdatatab.
  560. DATA: l_excel_template_path TYPE localfile,
  561. l_excel_path TYPE localfile,
  562. l_data_path TYPE localfile.
  563. DATA: l_msg TYPE char128.
  564.  
  565. * Download the excel template from server
  566. CONCATENATE 'MI' excel_id INTO l_formkey.
  567. CONCATENATE path '\' excel_fname '.XLT' INTO l_excel_template_path.
  568. REPLACE ALL OCCURRENCES OF '\\' IN l_excel_template_path WITH '\'.
  569.  
  570. * PERFORM DOWNLOAD_TEMPLATE USING L_FORMKEY L_EXCEL_TEMPLATE_PATH .
  571. DATA: l_path TYPE localfile.
  572. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
  573. EXPORTING
  574. key = l_formkey
  575. destination = l_excel_template_path
  576. CHANGING
  577. temp = l_path.
  578.  
  579. * Create EXCEL application
  580. * PERFORM CREATE_APPLICATION CHANGING E_MESSAGE.
  581. DATA: l_indicator TYPE i VALUE 0.
  582. IF g_excel IS INITIAL.
  583. CREATE OBJECT g_excel 'EXCEL.APPLICATION'.
  584. ENDIF.
  585. * PERFORM err_hdl CHANGING e_message.
  586. IF sy-subrc NE 0.
  587. e_message = 'EXCEL操作没成功执行' .
  588. RAISE excel_error.
  589. ENDIF.
  590. SET PROPERTY OF g_excel 'Visible' = l_indicator.
  591. * PERFORM err_hdl CHANGING e_message.
  592. IF sy-subrc NE 0.
  593. e_message = 'EXCEL操作没成功执行' .
  594. RAISE excel_error.
  595. ENDIF.
  596. SET PROPERTY OF g_excel 'DisplayAlerts' = l_indicator.
  597.  
  598. * Download to Excel indicator
  599. l_msg = '下载数据到EXCEL,请等待....'.
  600. * PERFORM progress_indicator USING l_msg.
  601. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  602. EXPORTING
  603. percentage = 0
  604. text = l_msg.
  605. * Download data to Front
  606. CONCATENATE path '\' excel_fname '.TXT' INTO l_data_path.
  607. REPLACE ALL OCCURRENCES OF '\\' IN l_data_path WITH '\'.
  608. * PERFORM download_data_file TABLES i_data USING l_data_path.
  609. SORT i_data BY row col.
  610. CALL FUNCTION 'GUI_DOWNLOAD'
  611. EXPORTING
  612. filename = l_data_path
  613. write_field_separator = cl_abap_char_utilities=>horizontal_tab
  614. codepage = ''
  615. TABLES
  616. data_tab = i_data.
  617. IF sy-subrc <> 0.
  618. ENDIF.
  619. CLEAR i_data[].
  620. * Open excel template
  621. * PERFORM open_excel_template USING l_excel_template_path
  622. * CHANGING e_message .
  623. CALL METHOD OF g_excel 'Workbooks' = g_workbookl.
  624. * PERFORM err_hdl CHANGING e_message.
  625. IF sy-subrc NE 0.
  626. e_message = 'EXCEL操作没成功执行' .
  627. RAISE excel_error.
  628. ENDIF.
  629. * OPen template file
  630. CALL METHOD OF g_workbookl 'Open' = g_workbook
  631. EXPORTING
  632. #1 = l_excel_template_path.
  633. IF sy-subrc NE 0.
  634. e_message = 'EXCEL操作没成功执行' .
  635. RAISE excel_error.
  636. ENDIF.
  637. * Open excel sheet
  638. * PERFORM open_excel_sheet USING sheet_name
  639. * CHANGING e_message.
  640. CALL METHOD OF g_workbook 'WORKSHEETS' = g_sheet
  641. EXPORTING
  642. #1 = sheet_name.
  643. IF sy-subrc NE 0.
  644. e_message = 'EXCEL操作没成功执行' .
  645. RAISE excel_error.
  646. ENDIF.
  647. CALL METHOD OF g_sheet 'ACTIVATE'.
  648. IF sy-subrc NE 0.
  649. e_message = 'EXCEL操作没成功执行' .
  650. RAISE excel_error.
  651. ENDIF.
  652. * Convert data file to excel
  653. * PERFORM run_macro_open_text USING l_data_path sheet_name.
  654. CALL METHOD OF g_excel 'RUN'
  655. EXPORTING
  656. #1 = 'Open_text'
  657. #2 = l_data_path
  658. #3 = sheet_name.
  659. * Save excel file
  660. CONCATENATE path '\' excel_fname '.XLS' INTO l_excel_path.
  661. REPLACE ALL OCCURRENCES OF '\\' IN l_excel_path WITH '\'.
  662. * PERFORM run_macro_save_excel USING l_excel_path.
  663. CALL METHOD OF g_excel 'RUN'
  664. EXPORTING
  665. #1 = 'Save_excel'
  666. #2 = l_excel_path.
  667.  
  668. IF show_excel = 'X'.
  669. SET PROPERTY OF g_excel 'VISIBLE' = 1 NO FLUSH.
  670. ENDIF.
  671. * Close excel
  672. * PERFORM close_excel CHANGING show_excel.
  673. * Free objects
  674. IF show_excel = space.
  675. CALL METHOD OF g_excel 'Quit'.
  676. ENDIF.
  677. FREE OBJECT g_cell.
  678. FREE OBJECT g_cell1.
  679. FREE OBJECT g_range.
  680. FREE OBJECT g_sheet.
  681. FREE OBJECT g_workbook.
  682. FREE OBJECT g_workbookl.
  683.  
  684. * force flush
  685. CALL FUNCTION 'FLUSH'
  686. EXCEPTIONS
  687. OTHERS = 0.
  688.  
  689. * Delete data file & template file
  690. * PERFORM delete_file USING l_data_path.
  691. CALL FUNCTION 'GUI_DELETE_FILE'
  692. EXPORTING
  693. file_name = l_data_path
  694. EXCEPTIONS
  695. failed = 1
  696. OTHERS = 2.
  697. IF sy-subrc <> 0.
  698. * Implement suitable error handling here
  699. ENDIF.
  700. * PERFORM delete_file USING l_excel_template_path.
  701. CALL FUNCTION 'GUI_DELETE_FILE'
  702. EXPORTING
  703. file_name = l_excel_template_path
  704. EXCEPTIONS
  705. failed = 1
  706. OTHERS = 2.
  707. IF sy-subrc <> 0.
  708. * Implement suitable error handling here
  709. ENDIF.
  710. ENDMETHOD.
  711.  
  712. ENDCLASS.

仅供参考

2019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)的更多相关文章

  1. [.Net] C# Excel操作类 ExcelHelper

    实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...

  2. C#EXCEL 操作类--C#ExcelHelper操作类

    主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...

  3. Excel 操作类

    转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...

  4. C#常用工具类——Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  5. C# Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  6. C#常用工具类——Excel操作类(ZT)

    本文转载于: http://www.cnblogs.com/zfanlong1314/p/3916047.html /// 常用工具类——Excel操作类 /// <para> ----- ...

  7. C#封装的VSTO Excel操作类

    自己在用的Excel操作类,因为经常在工作中要操作Excel文件,可是使用vba实现起来实在是不方便,而且编写也很困难,拼接一个字符串都看的眼花. 这个时候C#出现了,发现使用C#来操作Excel非常 ...

  8. C#自定义Excel操作类

    C#自定义Excel操作类,可以用于将DataTable导出到Excel文件,从Excel文件读取数据. using System; using System.IO; using System.Dat ...

  9. C# Excel操作类 ExcelHelper

    实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...

随机推荐

  1. 创建表空间 ora-01119

    create tablespace user_data logging datafile 'D:\app\Administrator\oradata\orcl\ARCHIVE.dbf' size 50 ...

  2. Mybatis关联查询(转载)

    原文地址: http://www.cnblogs.com/xiaolang8762400/p/7399892.html   mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映 ...

  3. BZOJ2118 墨墨的等式[同余类最短路]

    声明:关于这题的$O(mn)$尚且未深入理解,虽然之前有跟这位神仙聊过做法但并没太懂.. $O(mn\log m)$同余最短路做法: 首先不妨抽出最小的$a_i=m$,那么剩余的$a$如果可以表示出$ ...

  4. order-independent transparency & programmable blending

    Yang, McKee - OIT and Indirect Shadows(SIGGRAPH 2010 Advanced RealTime Rendering Course).pptx 最近又发现了 ...

  5. @Value和@ConfigurationProperties

    1.@Value用法 https://blog.csdn.net/u010832551/article/details/73826914 2.@ConfigurationProperties用法 ht ...

  6. 题解 POJ1149 Pigs

    先翻译一下吧(题面可以在原OJ上找) Mirko在一个由M个锁着的猪舍组成的养猪场工作,Mirko无法解锁任何猪舍,因为他没有钥匙.客户纷纷来到农场.他们每个人都有一些猪舍的钥匙,并想购买一定数量的猪 ...

  7. apache nginx 配置

    <VirtualHost *:80> ServerAdmin test@biuuu.com DocumentRoot E:\web\OTHER\test ServerName zjh.co ...

  8. Golang ioutil.ReadDir 读取目录下的内容并排序

    之前写的https://www.cnblogs.com/pu369/p/10620731.html一文中,也有对slice的排序,但代码乱的自己也看不下去了. 参考https://blog.csdn. ...

  9. 51 Nod 1116 K进制下的大数

    1116 K进制下的大数  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数 ...

  10. 征途堆积出友情的永恒「堆优化dp」

    直接写题解: 很简单的dp暴力转移式子:f[i]=MAX{f[j]+max(tax[j],sum[i]-sum[j])} 观察式子,只有一个变量sum[i]; 而其他都为定量; 则考虑维护 两个定量: ...