Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
Hallo,

ich möchte eine interne Tabelle als Excel Datei in einer Email versenden.
Folgenden Code habe ich mir zusammengesucht, zuerst wird per ABAP2XLSX eine echte Excel erzeugt, diese wird dann in ein Binär Format umgewandelt, um Sie als Anhang versenden zu können.

An sich klappt es schon mit dem Versand, allerdings erhalte ich folgende Fehlermeldung wenn ich die Excel öffnen möchte:
excel_err_msg.png
Quittiere ich das Fenster werden die Daten aber korrekt angezeigt.

Folgenden Code habe ich

Code: Alles auswählen.

*---------------------------------------------------------------------*
*      Form  send_excel
*---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IT_EXCEL   text
*----------------------------------------------------------------------*
FORM send_excel TABLES it_excel.
  TYPE-POOLS: abap.
  DATA: mailto TYPE ad_smtpadr VALUE 'XXX'.
  DATA: lo_excel         TYPE REF TO zcl_excel,
        lo_excel_writer  TYPE REF TO zif_excel_writer,
        lo_worksheet     TYPE REF TO zcl_excel_worksheet.

  DATA: ls_table_settings       TYPE zexcel_s_table_settings.

  DATA: lv_file      TYPE xstring,
        lv_bytecount TYPE i,
        lt_file_tab  TYPE solix_tab.

  DATA: lv_full_path      TYPE string,
        lv_workdir        TYPE string,
        lv_file_separator TYPE c.

  DATA: lv_title TYPE zexcel_sheet_title,
        lt_carr  TYPE TABLE OF scarr,
        row      TYPE zexcel_cell_row VALUE 2,
        lo_range TYPE REF TO zcl_excel_range.
  DATA: lo_data_validation  TYPE REF TO zcl_excel_data_validation.

  DATA c_col(21) VALUE 'BCDEFGHIJKLMNOPQRSTU'.
  DATA l_col TYPE zexcel_cell_column_alpha.
  DATA i TYPE i.

  DATA send_request   TYPE REF TO cl_bcs.
  DATA document       TYPE REF TO cl_document_bcs.
  DATA recipient      TYPE REF TO if_recipient_bcs.
  DATA main_text      TYPE bcsy_text.
  DATA binary_content TYPE solix_tab.
  DATA size           TYPE so_obj_len.
  DATA sent_to_all    TYPE os_boolean.

  " create active sheet
  CREATE OBJECT lo_excel.

  " get active sheet
  lo_worksheet = lo_excel->get_active_worksheet( ).
  lo_worksheet->set_title( ip_title = 'Logbuch').

  ls_table_settings-table_style  = zcl_excel_table=>builtinstyle_medium3.
  ls_table_settings-show_row_stripes = abap_true.
  ls_table_settings-nofilters = abap_true.

  lo_worksheet->bind_table( ip_table          = it_excel[]
                            is_table_settings = ls_table_settings ).

  " write to Excel 2007
  CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007.
  lv_file = lo_excel_writer->write_file( lo_excel ).

  " convert to binary
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = lv_file
    IMPORTING
      output_length = lv_bytecount
    TABLES
      binary_tab    = lt_file_tab.

  TRY.
*     create persistent send request
      send_request = cl_bcs=>create_persistent( ).
*     create and set document with attachment
*     create document object with text
      APPEND 'Hello world!' TO main_text.                   "#EC NOTEXT
      document = cl_document_bcs=>create_document(
        i_type    = 'RAW'
        i_text    = main_text
        i_subject = 'Test' ).                               "#EC NOTEXT

*     add the spread sheet as attachment to document object
      size = lv_bytecount.
      document->add_attachment(
        i_attachment_type    = 'xls'                        "#EC NOTEXT
        i_attachment_subject = 'SpreadSheet'                "#EC NOTEXT
        i_attachment_size    = size
        i_att_content_hex    = lt_file_tab ).

*     add document object to send request
      send_request->set_document( document ).
*     add recipient (e-mail address)
*     create recipient object
      recipient = cl_cam_address_bcs=>create_internet_address( mailto ).

*     add recipient object to send request
      send_request->add_recipient( recipient ).

      TRY.
      send_request->set_send_immediately( i_send_immediately = 'X' ).
      CATCH cx_send_req_bcs. " BCS: Ausnahmen von Sendeaufträgen
      ENDTRY.

*     send document
      sent_to_all = send_request->send( i_with_error_screen = 'X' ).

      COMMIT WORK.

      IF sent_to_all IS INITIAL.
        MESSAGE i500(sbcoms) WITH mailto.
      ELSE.
        MESSAGE s022(so).
      ENDIF.

*   ------------ exception handling ----------------------------------
    CATCH cx_bcs INTO @DATA(bcs_exception).
      MESSAGE i865(so) WITH bcs_exception->error_type.
  ENDTRY.
ENDFORM.                    "send_excel
Gehe ich da überhaupt noch zeitgemäß an die Sache ran mit dem Binär Ansatz? Gibt es da eine elegantere Lösung?

Danke und VG

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von Thomas R. (Expert / 757 / 78 / 34 ) »
Hallo,
speicherst Du die Datei als xls oder als xlsx?
Kann es sein, dass Du einfach nur als Dateierweiterung xlsx angeben musst?

MfG
Thomas R.

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
Thomas R. hat geschrieben:
17.03.2022 09:48
Hallo,
speicherst Du die Datei als xls oder als xlsx?
Kann es sein, dass Du einfach nur als Dateierweiterung xlsx angeben musst?

MfG
Thomas R.
Hallo, die Fehlermeldung bekomme ich, wenn ich in Outlook die Datei öffne.
Allerdings ist mir nun aufgefallen: Speichere ich die Datei manuell als xlsx statt xls, kann ich sie nun ohne Fehlermeldung öffnen.

Problem:
Beim Hinzufügen der Excel als Anhang kann ich als Objekttyp nur 3-stellige Werte angeben, also kein 'xlsx'

Code: Alles auswählen.

*     add the spread sheet as attachment to document object
      size = lv_bytecount.
      document->add_attachment(
        i_attachment_type    = 'xls' "'xlsx' don work here  "#EC NOTEXT
        i_attachment_subject = 'SpreadSheet'                "#EC NOTEXT
        i_attachment_size    = size
        i_att_content_hex    = lt_file_tab ).

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
so funktioniert bei mir

Code: Alles auswählen.

DATA sood_bytecount  TYPE sood-objlen.
DATA lt_attachement TYPE solix_tab.
DATA lt_att_head TYPE soli_tab.
DATA lv_xdata TYPE xstring.
DATA lv_filename TYPE string.  "soll xlxs am Ende enthalten

sood_bytecount = CONV #( xstrlen( lv_xdata ) ).

lt_att_head = VALUE #( ( '&SO_FILENAME=' && lv_filename ) )

lo_document->add_attachment( 
           EXPORTING
             i_attachment_type     = 'XLS'
             i_attachment_subject  = lv_attachement_subject
             i_attachment_size     = sood_bytecount
             i_att_content_hex     = lt_attachement
             i_attachment_header = lt_att_head ).

Folgende Benutzer bedankten sich beim Autor sap_enthusiast für den Beitrag:
der_neuling


Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von Thomas R. (Expert / 757 / 78 / 34 ) »
Hallo,
versuch mal den type in Großbuchstaben 'XLS' und gib bei subject die gewünschte Endung xlsx mit an 'SpreadSheet.xlsx'
Es ist schon länger her bei mir, aber damit habe ich das Problem nicht.

MfG
Thomas R.

Edit: Enthusiast war schneller

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
sap_enthusiast hat geschrieben:
17.03.2022 10:15
so funktioniert bei mir

Code: Alles auswählen.

DATA sood_bytecount  TYPE sood-objlen.
DATA lt_attachement TYPE solix_tab.
DATA lt_att_head TYPE soli_tab.
DATA lv_xdata TYPE xstring.
DATA lv_filename TYPE string.  "soll xlxs am Ende enthalten

sood_bytecount = CONV #( xstrlen( lv_xdata ) ).

lt_att_head = VALUE #( ( '&SO_FILENAME=' && lv_filename ) )

lo_document->add_attachment( 
           EXPORTING
             i_attachment_type     = 'XLS'
             i_attachment_subject  = lv_attachement_subject
             i_attachment_size     = sood_bytecount
             i_att_content_hex     = lt_attachement
             i_attachment_header = lt_att_head ).
Hallo, das funktioniert leider noch nicht. Könntest du mal den ganzen Code Schnipsel zeigen? Z.B. ist anhand des Ausschnittes auch der Wert für lv_attachement_subject oder lv_filename nicht ersichtlich
Zuletzt geändert von der_neuling am 17.03.2022 10:43, insgesamt 2-mal geändert.

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von der_neuling (ForumUser / 89 / 18 / 3 ) »
Thomas R. hat geschrieben:
17.03.2022 10:35
Hallo,
versuch mal den type in Großbuchstaben 'XLS' und gib bei subject die gewünschte Endung xlsx mit an 'SpreadSheet.xlsx'
Es ist schon länger her bei mir, aber damit habe ich das Problem nicht.

MfG
Thomas R.

Edit: Enthusiast war schneller
double_naming.png

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von Thomas R. (Expert / 757 / 78 / 34 ) »
Hallo,
hier mein Aufruf:
Aufruf.png
und die email
email.png
MfG
Thomas R.

Folgende Benutzer bedankten sich beim Autor Thomas R. für den Beitrag (Insgesamt 2):
sap_enthusiastder_neuling


Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
@Thomas R. danke für die Ergänzung! :)
habe leider nicht ganz hingekriegt... :/

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin sap_enthusiast,

ABAP2XLSX liefert doch die Demoprogramme mit. Fast jedes dieser Programm(z.B. ZDEMO_EXCEL1 ) hat am Ende folgende Zeilen, mit der die Ausgabe erzeugt wird.

Code: Alles auswählen.

*** Create output
  lcl_output=>output( lo_excel ).
Und innerhalb dieses Coding findet sich dann eine Demoroutine zum Versand via Email. Dort einfach einen DebugStop setzen und anschauen, was genau in der Variable wa_attachment_header drin steht ( nämlich der Dateiname mit der vollständigen langen Endung ).
Das "XLS", das bei der Methode "add_attachment" mitgegeben wird sorgt lediglich dafür, dass beim Anzeigen der Email in der SOST das Attachment als Excel erkannt und dargestellt wird.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
sap_enthusiastIcke0801

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
@black_adept
Erneut was dazugelernt :)
Vielen Dank!

Re: Email Versand Excel: Dateiformat und Erweiterung passen nicht zueinander

Beitrag von Murdock (Specialist / 126 / 60 / 10 ) »
Der Vollständigkeit halber sei noch erwähnt, dass man die Meldung von Excel auch per Registry Eintrag deaktivieren kann. Vielleicht kommt es ja mal vor, dass man keinen Einfluss auf die Erstellung des Dokuments hat:

Code: Alles auswählen.

reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security" /v ExtensionHardening /t REG_DWORD /d 0 /f

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1835
Views
2
Antw.
1672
Views
Workflow: eMail Versand
von bapimueller » 21.08.2019 18:04 • Verfasst in ABAP® Core
3
Antw.
973
Views
Interner Error bei Email Versand
von tom12 » 03.04.2019 12:35 • Verfasst in ABAP® für Anfänger
1
Antw.
9744
Views
Email versand bei Auftragsbestätigung (Kunde)
von markus86 » 26.10.2011 08:24 • Verfasst in ABAP® Core
0
Antw.
1774
Views
Texte in Mail bei Versand via eMail
von reffi » 21.12.2007 13:10 • Verfasst in Sales and Distribution

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2674
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4480