Interne Tabelle als xls Datei per E-Mail verschicken Thema ist als GELÖST markiert

Getting started ... Alles für einen gelungenen Start.
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Interne Tabelle als xls Datei per E-Mail verschicken

Beitrag von Niko_BC (ForumUser / 8 / 2 / 0 ) » 28.06.2018 14:33
Guten Tag,
ich bin noch neu in der ABAP Programmierung und stehe vor einem Problem.
Ich soll eine Interne Tabelle, welche ich als ALV ausgebe, per Mail verschicken.
Was wäre die beste Methode dazu ?

Vielen Lieben Dank


Re: Interne Tabelle als xls Datei per E-Mail verschicken

Beitrag von ralf.wenzel (Top Expert / 3542 / 167 / 242 ) » 28.06.2018 14:53
Das wurde hier schon x-mal durchgekaut, einfach mal die SuFu benutzen. Oder gleich Google.

Ralf

Re: Interne Tabelle als xls Datei per E-Mail verschicken

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) » 28.06.2018 15:48
Am einfachsten ist es, wenn du keine xls, sondern eine csv verschickst.
Aber ich habe das schon mal so gemacht.

EDIT: Falsch verstanden, dachte, du wolltest einen Excel Download. Für Mailversendung würde ich die interne Tabelle mit einer Transformation in HTML umwandeln, das habe ich hier einmal beschrieben: https://www.abapforum.com/forum/viewtop ... 206#p86206

Code: Alles auswählen.

REPORT  y_alv_excel.

TABLES: vbak.

*------------------------------*
* Definitionen + Deklarationen *
*------------------------------*

INCLUDE y_alv_excel_top.

*------------------*
* Selektion-Screen *
*------------------*

SELECTION-SCREEN: BEGIN OF BLOCK param WITH FRAME TITLE text-001.
  SELECT-OPTIONS: s_erdat FOR vbak-erdat.
SELECTION-SCREEN: END OF BLOCK param.

SELECTION-SCREEN: BEGIN OF BLOCK limit WITH FRAME TITLE text-002.
PARAMETERS: p_limit TYPE p_dbacc DEFAULT 2500.
SELECTION-SCREEN: END OF BLOCK limit.

SELECTION-SCREEN: BEGIN OF BLOCK form WITH FRAME TITLE text-003.
PARAMETERS: rb_excel RADIOBUTTON GROUP typ,
            rb_list  RADIOBUTTON GROUP typ DEFAULT 'X'.
SELECTION-SCREEN: END OF BLOCK form.

*----------------*
* Datenselektion *
*----------------*

CLEAR gt_vbelege.

SELECT vbeln erdat
INTO CORRESPONDING FIELDS OF TABLE gt_vbelege
FROM vbak
UP TO p_limit ROWS
WHERE erdat IN s_erdat
ORDER BY erdat vbeln.

IF sy-subrc = 0.

* Wahl des Ausgabemediums
  CASE 'X'.
    WHEN rb_excel.
      PERFORM excel_download.
    WHEN rb_list.
      PERFORM display_alv.
  ENDCASE.

ENDIF.
Top-Include

Code: Alles auswählen.

*-------*
* TYPES *
*-------*

TYPES: BEGIN OF ty_vbelege,
  vbeln TYPE vbeln_va,
  erdat	TYPE erdat,
END OF ty_vbelege.

TYPES: BEGIN OF ty_vbelege_excel,
  vbeln TYPE vbeln,
  erdat TYPE string,
END OF ty_vbelege_excel.

*---------*
* Klassen *
*---------*

* Eventhandler definieren
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
  METHODS:

  on_link_click
  FOR EVENT link_click OF cl_salv_events_table
  IMPORTING row column.

ENDCLASS.                    "lcl_handle_events DEFINITION

*------*
* DATA *
*------*

* Datentabellen
DATA: gt_vbelege TYPE STANDARD TABLE OF ty_vbelege,
      gt_vbelege_excel TYPE STANDARD TABLE OF ty_vbelege_excel.

* Workareas
DATA: wa_vbelege TYPE ty_vbelege,
      wa_vbelege_excel TYPE ty_vbelege_excel.

* Hilfsvariablen
DATA: h_datum     TYPE  string.            " zum formattieren der Datümer

* Excel Download
DATA: h_offset   TYPE I,
      h_path     TYPE string,
      h_fullpath TYPE string,
      h_filename TYPE string,
      h_file     TYPE rlgrap-filename,
      h_filepath TYPE rlgrap-filename.

DATA: BEGIN OF t_fieldnames OCCURS 0,
  fnames(195),
END OF t_fieldnames.

DEFINE append_fname.
  CLEAR t_fieldnames.
  t_fieldnames = &1.
  APPEND t_fieldnames.
  CLEAR t_fieldnames.
END-OF-DEFINITION.

* alv Listausgabe
DATA: go_alv              TYPE REF TO  cl_salv_table,
      go_column           TYPE REF TO  cl_salv_column_table,
      go_columns          TYPE REF TO  cl_salv_columns_table,
      go_functions        TYPE REF TO  cl_salv_functions_list,      " toolbar
      go_display          TYPE REF TO  cl_salv_display_settings,
      go_layout           TYPE REF TO  cl_salv_layout,
      go_selections       TYPE REF TO  cl_salv_selections,          " multiselect
      go_sort             TYPE REF TO  cl_salv_sorts,               " von Anfang an sortiert ausgeben
      go_events           TYPE REF TO  cl_salv_events_table,        " Events
      go_event_handler    TYPE REF TO  lcl_handle_events,
      gx_salv_msg         TYPE REF TO  cx_salv_msg,                 " exceptions
      gx_salv_not_found   TYPE REF TO  cx_salv_not_found,
      gx_salv_existing    TYPE REF TO  cx_salv_existing,
      gx_salv_data_error  TYPE REF TO  cx_salv_data_error,
      gs_layoutkey        TYPE         salv_s_layout_key.
Excel-Download

Code: Alles auswählen.

FORM excel_download.

* Excel-Ausgabetabelle füllen


  LOOP AT gt_vbelege INTO wa_vbelege.

    wa_vbelege_excel-bukrs = wa_vbelege-bukrs.
    wa_vbelege_excel-ekorg = wa_vbelege-ekorg.

*   Datümer formattieren
    IF wa_vbelege-erdat IS NOT INITIAL.
      CONCATENATE wa_vbelege-erdat+6(2) '.' wa_vbelege-erdat+4(2) '.' wa_vbelege-erdat(4) INTO h_datum.
      wa_vbelege_excel-erdatr = h_datum.
      CLEAR h_datum.
    ENDIF.

    ENDIF.

    APPEND wa_vbelege_excel TO gt_vbelege_excel.

  ENDLOOP.

* Header hinzufügen
  append_fname 'Vertriebsbeleg'.
  append_fname 'Datum'.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title = 'Speichern'
      file_filter  = cl_gui_frontend_services=>filetype_excel
    CHANGING
      filename     = h_filename
      path         = h_path
      fullpath     = h_fullpath.

* Dateiendung abschneiden
  FIND ALL OCCURRENCES OF '.' IN h_fullpath MATCH OFFSET h_offset.
  h_filepath = h_fullpath+0(h_offset).
  CLEAR h_offset.
  FIND ALL OCCURRENCES OF '.' IN h_filename MATCH OFFSET h_offset.
  h_file = h_filename+0(h_offset).

  CALL FUNCTION 'MS_EXCEL_OLE_STANDARD_DAT'
    EXPORTING
      file_name                 = h_filepath
      data_sheet_name           = h_file
      password_option           = 0
    TABLES
      data_tab                  = gt_vbelege_excel
      fieldnames                = t_fieldnames
    EXCEPTIONS
      file_not_exist            = 1
      filename_expected         = 2
      communication_error       = 3
      ole_object_method_error   = 4
      ole_object_property_error = 5
      invalid_filename          = 6
      invalid_pivot_fields      = 7
      download_problem          = 8
      OTHERS                    = 9.

  CASE sy-subrc.
    WHEN 1.
      MESSAGE 'File does not exist' TYPE 'E'.
    WHEN 2.
      MESSAGE 'Filename expected' TYPE 'E'.
    WHEN 3.
      MESSAGE 'Communication error' TYPE 'E'.
    WHEN 4.
      MESSAGE 'OLE object method error' TYPE 'E'.
    WHEN 5.
      MESSAGE 'OLE object property error' TYPE 'E'.
    WHEN 6.
      MESSAGE 'Invalid filename' TYPE 'E'.
    WHEN 7.
      MESSAGE 'Invalid pivot fields' TYPE 'E'.
    WHEN 8.
      MESSAGE 'Download problem' TYPE 'E'.
    WHEN 9.
      MESSAGE 'Other problem' TYPE 'E'.
  ENDCASE.

ENDFORM.

Folgende Benutzer bedankten sich beim Autor Legxis für den Beitrag:
Niko_BC

( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: Interne Tabelle als xls Datei per E-Mail verschicken

Beitrag von Niko_BC (ForumUser / 8 / 2 / 0 ) » 28.06.2018 16:25
Vielen Dank Legxis,
jedoch versteh ich da vieles gar nicht :/ .
Ich habe eine andere Methode gefunden, wie ich eine Excel Datei per Mail verschicken kann.
Mit der Klasse CL_BCS.
Das klappt irgendwie auch ( keine Ahnung wie ich das hinbekommen habe)
Jedoch fehlt mir bei der Excel Tabelle die Kopfzeile.
Weißt du womöglich wie man das einfügen kann ?

Vielen Dank.

Re: Interne Tabelle als xls Datei per E-Mail verschicken

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) » 29.06.2018 10:35
Die interne Tabelle, die du da hast, hat wahrscheinlich gar keine Kopfzeile, das fügt der SALV immer automatisch ein. Du musst manuell eine Kopfzeile einfügen.
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Interne Tabelle als Excel-Anhang verschicken
von Sandra » 06.04.2005 17:23
Interne Tabelle als Mail versenden
von SaskuAc » 12.03.2018 14:38
Werte Per Mail verschicken
von quindata » 02.08.2010 09:08
Mehrer Änhänge per Mail verschicken
von godevilgo » 28.04.2006 15:08