Excel Tabelle lesen, Open dataset

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
24 Beiträge • Vorherige Seite 2 von 2 (current)
24 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von pohlmann-schwarza (ForumUser / 91 / 0 / 0 ) »
Danke für den Tipp.

Hier find ich das Kernel Release. Es ist angegeben mit 46D.
Somit funktioniert CREAT DATA wohl schon auf 46D.

Bedauerlich ist das das Release nicht höher ist...

Wollte nochmal auf mein Problem mit dem GUI_UPLOAD zurück kommen.
Hatte weiter oben schon mal geschrieben das ich nur 75 Zeichen pro Zeile einlesen kann.
Was kann ich nun tun das meine Feldlänge beliebig lang ist.

Ich hoffe das hat nicht mit meinem Release zu tun.

Viele Grüße
Michael

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


Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

leider hat das, so wie es oben beschrieben wurde, bei mir noch nie funktioniert.

Ich nehme als Tabelle bzw. Tabellenzeile für den GUI_UPLOAD eine DDIC-Struktur vom Typ String und fester Länger 256.

Da kann man schon mal nachsehen, was man sich da hochgeladen hat.

Die "Entfuselung" mit vorgegebener und ggf. "handgestrickter" Struktur ist bei mir auch immer noch schief gegangen.

Ich nutze die Möglichkeit des SPLIT-Befehls, eine Rohdatenzeile in eine Tabelle zu "trennen". Jede Tabellenzeile dieser Trenntabelle ist diesmal ein "unbegrenzter" STRING und entspricht einer Spalte.

Die ganze Rohdatentabelle abLOOPen und jede Zeile Splitten ...

Code: Alles auswählen.

 split I_BDATARAW at I_SEPARATOR into table LT.
Und dann kann ich ganz bequem die Spalten 1 bis N verarbeiten.

Code: Alles auswählen.

read Table LT assigning <lt> index 1 (oder 2 oder 3 oder ... oder).
In <lt> habe ich den Wert der nummerierten Spalte der gerade laufenden Zeile.

Zugegeben, vielleicht etwas aufwendig, dafür schon viele Male mit Erfolg eingesetzt.

Gruß
babap
P.S. Das gute daran ist, noch bevor die Daten in ein definiertes Feld "gemoved" werden, kann ich schon mal prüfen, was da überhaupt drin steht, denn SPLIT ... AT ... INTO A B C D fliegt raus, wenn der Inhalt auf ein "unverträgliches" Feld triff (z.B. Buchstaben auf ein Fließkommafeld etc.)

Beitrag von meliz (ForumUser / 18 / 0 / 0 ) »
Hallo TWP,

Was meintest du mit einer Tabellen definition? Ich habe Type input definiert, was stimmt da nicht?
Das Ergebnis von Itab ist: Es werden2 Spalten erzeugt, und nur mit einem zeichen gefüllt. Eigentlich habe ich 10 Spalten mit den vokabeln gefüllt.
Inhalt von itab:

Zeile Table Line
1 v
2 e

und wenn ich den type nicht mit data sondern types definiere kommt die Fehlermeldung, dass itab und wa_input nicht convertierbar ist.

Hier ist der Code
DATA: BEGIN OF input,
vokabel_art TYPE string,
antwort_art TYPE string,
vokabel_de TYPE string,
synonym_de TYPE string,
vokabel_tr TYPE string,
synonym_tr TYPE string,
vokabel_eng TYPE string,
synonym_eng TYPE string,
vokabel_i TYPE string,
synonym_i TYPE string,
END OF input.

DATA: filename TYPE string,
it_input TYPE TABLE OF string.

DATA: wa_input type zvokabel,
it_container LIKE TABLE OF zvokabel.

DATA: itab type TABLE OF input.
CONSTANTS: htab(1) VALUE %_horizontal_tab.

filename = 'C:\\zvokabel_tabelle1.csv'.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = filename
filetype = 'ASC'
has_field_separator = 'X'
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = itab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* NO_AUTHORITY = 6
* UNKNOWN_ERROR = 7
* BAD_DATA_FORMAT = 8
* HEADER_NOT_ALLOWED = 9
* SEPARATOR_NOT_ALLOWED = 10
* HEADER_TOO_LONG = 11
* UNKNOWN_DP_ERROR = 12
* ACCESS_DENIED = 13
* DP_OUT_OF_MEMORY = 14
* DISK_FULL = 15
* DP_TIMEOUT = 16
* OTHERS = 17
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

LOOP AT itab INTO wa_input.

IF sy-subrc <> 0.
EXIT.
ENDIF.

IF sy-tabix > 1.
APPEND wa_input TO it_container.
ENDIF.

ENDLOOP.

MODIFY zvokabel_2 FROM TABLE it_container.
UPDATE zvokabel_2.
COMMIT WORK.

Beitrag von pohlmann-schwarza (ForumUser / 91 / 0 / 0 ) »
Halla babap, danke für deine Tipps.

Da ich eigentlich keine DDIC-Strucktur dafür anlegen möchte/darf hab ich nochmal weiter geforscht:

Erstmal hab ich mir eine interne Tabelle mit Workarea aufgebaut. Zeilentyp soll weiterhin string sein da die Excel Datei ziehmlich lang ist. Also fast so wie du beschrieben hast. Nur eben nicht als Dictionary Strucktur.

Code: Alles auswählen.

TYPES: BEGIN OF zeile04_typ,
         zeile TYPE string,
       END OF zeile04_typ.

TYPES itab04_typ TYPE STANDARD TABLE OF zeile04_typ.

* Deklaration der Tabelle (it_externtab)
DATA wa_externtab TYPE zeile04_typ.
DATA it_externtab TYPE itab04_typ.
Es ist wohl so, dass der Debugger nur 75 Zeichen einer internen Tabelle anzeigt. :?:

Wenn ich die Daten nach GUI_UPLOAD aus der Tabelle zurück in Ihre Workarea schreibe und im Debugger anzeige sind es schon 132 Zeichen.

Die Frage ist nun, wieviele Zeichen einer Variablen werden im Debugger eigentlich angezeigt? Vieleicht stehen ja sogar alle Zeichen meiner Datei in der Tabelle.


Viele Grüße
Michael

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Hier mal ein Beispiel für alle Zweifler und die die es noch nicht wisse:

1) erstellt eine Excel Tabelle mit folgenden Inhalt
Spalte1 Spalte2 Spalte3
e hello Hallo
d Moin hi

2) speichert diese Datei (z.B. test.txt) als Tab getrennte Textdatei

3) Einlesen in SAP wie folgt.

REPORT ztest.

DATA: BEGIN OF g_daten,
spra TYPE c,
wort1 TYPE string,
wort2 TYPE string,
END OF g_daten.

DATA: gt_daten LIKE STANDARD TABLE OF g_daten.

START-OF-SELECTION.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'd:\test.txt'
has_field_separator = 'X'
TABLES
data_tab = gt_daten.

LOOP AT gt_daten INTO g_daten.
WRITE: / g_daten-spra, g_daten-wort1, g_daten-wort2.
ENDLOOP.

So nun denke ich es ist verständlich und ihr könnt damit was anfangen.
Wenn man die Daten auf diese Weise einließt, spart man sich das Splitten der einzelenen Zeilen. Sofern es in älteren Systmen keinen Type String gibt, das Feld einfach als C Feld z.b. mit 100 Zeichen definieren - das geht auch.

MfG

Thomas

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

klar funktioniert das. Und für eine "Nur mal Eben" Anwendung ist das völlig OK.

Bei einer dauerhaften Anwendung, die flexibler auf die Inhalte der CSV-Datei reagieren muß, würde ich das so nicht machen.

Wenn die Struktur Kommafelder enthält und die CSV-Datei Text liefert bruzzelt das Programm ab.

Ich bleibe dem etwas aufwendigeren Coding (s.o.) treu.

Damit habe ich letztens einen Buchungspool realisiert, der auf die verschiedensten CSV-Dateien und Strukturen reagieren kann. Damit habe ich 8 CSV-Schnittstellen unter einen Hut gebracht, so daß zentrale Funktionen wie Upload der Rohdaten, löschen Quellfiles, Plausibilität, Manuelle Bearbeitung, Buchen, Storno, Protokoll etc. nur einmal realisiert werden mussten.

Schnittstellenspezifisch ist nur noch der "Entfuseler", der den CSV-Inhalt in eine zentrale Struktur überführt. Fest definierte Strukturen für jede Schnittstelle hätten dabei nicht zum Ziel geführt.

Gruß
babap

Gruß
babap

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Hallo babap,

nun mal nicht so negativ. Abbruzeln tut das Programm nur, wenn du versucht die Daten in numerische Felder zu schreiben. da man dies dann noch meist im 2. Schritt tut kann man ( so man findet ) bei numerischen Feldern die Komms durch Punkte bzw. vorher die Kommas durch nix ersetzen (Tranlate).
Bei deinem dynamischen einlesen weißt du doch auch nicht ob das feld nummerisch sein soll oder nicht.

Also mal ganz ruhig bleibe, denn das war ja schließlich nur ein Beispiel wie es prinzipiell funktioniert.

Gruß

Thomas

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Ich habe mal eben eine CSV-Datei in Excel erstellt.
Inhalt: A1 = Test B1 = ; C1 = Test
Ergebnis: Test;";";TEST
Soweit zum "aufwendigem Coding" und dem SPLIT-Befehl...

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,
TWP hat geschrieben:...
nun mal nicht so negativ.
...
Abbruzeln tut das Programm nur, wenn du versucht die Daten in numerische Felder zu schreiben.
...
Bei deinem dynamischen einlesen weißt du doch auch nicht ob das feld nummerisch sein soll oder nicht.
...
Also mal ganz ruhig bleibe, denn das war ja schließlich nur ein Beispiel wie es prinzipiell funktioniert.
...
oh, tschuldigung, bitte nicht falsch verstehen, ich bin ganz ruhig und überhaupt nicht negativ eingestellt.

Genau, abbruzzeln tut es bei numerischen Feldern, aber auch bei Datumsfeldern.

Allerdings weiß ich immer ganz genau, wohin der Wert soll und dann kann ich ihn erstmal testen und vorbehandeln.

Jeder darf und soll seinen Teil der Trickkiste hier zum Besten geben.

Gruß
babap

Vergleichbare Themen

1
Antw.
2205
Views
Open Dataset erstellen (excel format auf Appl.-Server sp.)
von amjahid » 29.06.2008 14:05 • Verfasst in ABAP® für Anfänger
0
Antw.
1418
Views
Dynamische Tabelle per open dataset auf dem Server ausgeben
von gast4711 » 01.10.2007 15:25 • Verfasst in ABAP® Core
1
Antw.
2453
Views
Open Dataset, Transfer, Close Dataset.Transfer unvollständig
von mari » 25.09.2007 09:28 • Verfasst in ABAP® Core
0
Antw.
1709
Views
open dataset
von joachim » 18.08.2008 11:05 • Verfasst in ABAP® Core
10
Antw.
7031
Views
Open Dataset Fehler
von petre » 19.06.2008 14:25 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

DIN Norm Klassifizierung
Gestern von Radinator 1 / 111
Anwenderdoku in SAP
vor 3 Tagen von ewx 10 / 621
Schlüssel erstellen ABAP
vor 4 Tagen von rob_abc 4 / 956
Pushbutton springt nicht ins PAI-Modul
vor 6 Tagen von MiTip gelöst 15 / 1375

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.

Aktuelle Forenbeiträge

DIN Norm Klassifizierung
Gestern von Radinator 1 / 111
Anwenderdoku in SAP
vor 3 Tagen von ewx 10 / 621
Schlüssel erstellen ABAP
vor 4 Tagen von rob_abc 4 / 956
Pushbutton springt nicht ins PAI-Modul
vor 6 Tagen von MiTip gelöst 15 / 1375