ABAP系列SAP ABAP DOI展示EXCEL或WORD

Posted sapmatinal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP系列SAP ABAP DOI展示EXCEL或WORD相关的知识,希望对你有一定的参考价值。

公众号:SAP Technical
本文作者:matinal
 

技术图片

 

前言部分

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

正文部分

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

?

 

以上是关于ABAP系列SAP ABAP DOI展示EXCEL或WORD的主要内容,如果未能解决你的问题,请参考以下文章

sap abap报表显示的问题

ABAP系列SAP 一个完整的SAP的Abap例子(idoc,edi文件的相互转换)

ABAP系列SAP ABAP 动态指针

ABAP系列SAP ABAP 工单增强

ABAP系列SAP ABAP 的替代和校验

ABAP系列SAP ABAP 物料凭证增强