ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【ABAP系列】SAP ABAP DOI展示EXCEL或WORD

2019-07-14 10:05:18  阅读:412  来源: 互联网

标签:sy DOI retcode type EXCEL ABAP call error data


公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:【ABAP系列】SAP ABAP DOI展示EXCEL或WORD  

 

前言部分

大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

正文部分

DOI技术算是比较老的技术了

用来直接调用office展示结果

可以是EXCEL也可以是WORD

​
data: begin of s_fal.
        include structure faglflext.
data: end of s_fal.
data: i_fal like table of s_fal.
data: ok_code like sy-ucomm.
type-pools: soi,sbdst,abap.
class c_oi_errors definition load.

data control type ref to i_oi_container_control.
data retcode  type  soi_ret_string.

data: container type ref to cl_gui_custom_container.

data: document type ref to i_oi_document_proxy.
data: error        type ref to        i_oi_error.
data: errors type ref to i_oi_error occurs 0.

data spreadsheet type ref to i_oi_spreadsheet.
data sheetname(20) type c.
select * from faglflext into corresponding fields of table i_fal where rbukrs = '9900' and ryear = '2008' and racct = '0020110101'.


call screen 100.
*&---------------------------------------------------------------------*
*&      Module  status_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module status_0100 output.
  set pf-status '100'.


  call method c_oi_container_control_creator=>get_container_control
    importing
      control = control
      retcode = retcode.


  create object container
    exporting
      container_name = 'DOI_PARENT'."100屏幕上的控件名.

  call method control->init_control
    exporting
      r3_application_name = 'Demo Document Container'
      inplace_enabled     = 'X'
      parent              = container
    importing
      retcode             = retcode.

  call method control->get_document_proxy
    exporting
      document_type   = 'Excel.Sheet.8'
      document_format = 'OLE'
    importing
      document_proxy  = document
      retcode         = retcode.

  call method document->create_document
    exporting
      create_view_data = 'X'
      open_inplace     = 'X'
    importing
      retcode          = retcode.
  call method document->get_spreadsheet_interface
    exporting
      no_flush        = ' '
    importing
      sheet_interface = spreadsheet
      error           = error.
  call method spreadsheet->get_active_sheet
    exporting
      no_flush  = ''
    importing
      sheetname = sheetname
      error     = error
      retcode   = retcode.
  call method spreadsheet->add_sheet
    exporting
      name     = '年度报表'
      no_flush = ''
    importing
      error    = error
      retcode  = retcode.
  call method spreadsheet->delete_sheet
    exporting
      name     = sheetname
      no_flush = ''
    importing
      error    = error
      retcode  = retcode.
  call method spreadsheet->select_sheet
    exporting
      name     = '年度报表'
      no_flush = ''
    importing
      error    = error
      retcode  = retcode.

  data: rows like sy-tabix.
  data: field_count type i.
  data: rangeitem type soi_range_item.
  data: ranges type soi_range_list.
  data: excel_input type soi_generic_table.
  data: excel_input_wa type soi_generic_item.
  field-symbols: <field> type any,
                 <wa> type any.
  field_count = 1.
  do.
    assign component field_count of structure s_fal to <field>."assign成功subrc = 0.
    if sy-subrc <> 0.
      exit.
    endif.
    add 1 to field_count.
  enddo.
  field_count = field_count - 1.
  describe table i_fal lines rows.
  call method spreadsheet->insert_range_dim
    exporting
      name     = 'CELL'
      no_flush = 'X'
      top      = 1
      left     = 1
      rows     = rows
      columns  = field_count
    importing
      error    = error.

  clear rangeitem.
  refresh ranges.
  rangeitem-name = 'CELL'.
  rangeitem-columns = field_count.
  rangeitem-rows = rows.
  append rangeitem to ranges.
  call method spreadsheet->set_font
    exporting
      rangename = 'CELL'
      family    = 'Times New Roman'
      size      = 9
      bold      = 0
      italic    = 0
      align     = 0
    importing
      error     = error
      retcode   = retcode.
  call method spreadsheet->set_format
    exporting
      rangename = 'CELL'
      typ       = 0
      currency  = 'RMB'
    importing
      error     = error
      retcode   = retcode.

  refresh excel_input.

  data: field_value type string.
  loop at i_fal assigning <wa>.
    rows = sy-tabix.
    field_count = 1.
    do.
      assign component field_count of structure <wa> to <field>."assign成功subrc = 0.
      if sy-subrc <> 0.
        exit.
      endif.
      clear excel_input_wa.
      excel_input_wa-column = field_count.
      excel_input_wa-row = rows.
      field_value = <field>.
      excel_input_wa-value = field_value.
      append excel_input_wa to excel_input.
      add 1 to field_count.
    enddo.
  endloop.
* set data
  call method spreadsheet->set_ranges_data
    exporting
      ranges   = ranges
      contents = excel_input
      no_flush = 'X'
    importing
      error    = error.
*get desktop directory
  data: desktop_directory type string.
  call method cl_gui_frontend_services=>get_sapgui_workdir
    changing
      sapworkdir            = desktop_directory
    exceptions
      get_sapworkdir_failed = 1
      cntl_error            = 2
      error_no_gui          = 3
      not_supported_by_gui  = 4
      others                = 5.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
               with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

  if desktop_directory is initial.
    desktop_directory = 'C:'.
  endif.
  concatenate desktop_directory '\' '年度报表.xls' into desktop_directory.

  data: result type abap_bool.
  call method cl_gui_frontend_services=>file_exist
    exporting
      file                 = desktop_directory
    receiving
      result               = result
    exceptions
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      others               = 5.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
               with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.
  data: rc type i.
  if result = 'X'.
    call method cl_gui_frontend_services=>file_delete
      exporting
        filename             = desktop_directory
      changing
        rc                   = rc
      exceptions
        file_delete_failed   = 1
        cntl_error           = 2
        error_no_gui         = 3
        file_not_found       = 4
        access_denied        = 5
        unknown_error        = 6
        not_supported_by_gui = 7
        wrong_parameter      = 8
        others               = 9.
    if sy-subrc <> 0.
      message id sy-msgid type sy-msgty number sy-msgno
                 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    endif.
  endif.
  data:file_name(250) type c.
  file_name = desktop_directory.
  call method document->save_as
    exporting
      file_name   = file_name
      prompt_user = ''
    importing
      error       = error
      retcode     = retcode.
*放到FTP
*.............................
*.............................
*在这里写放到FTP上的语句.
endmodule.                 " status_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  user_command_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module user_command_0100 input.
  case ok_code.
    when 'EXIT' or 'BACK'.
      leave to screen 0.
  endcase.
endmodule.                 " user_command_0100  INPUT

​

 

标签:sy,DOI,retcode,type,EXCEL,ABAP,call,error,data
来源: https://www.cnblogs.com/SAPmatinal/p/11183210.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有