tag:blogger.com,1999:blog-7017123333978978050.post9039212464760415382..comments2022-04-01T05:15:14.655+01:00Comments on Rüdiger Plantiko: Parser für Komma-separierte DatenRüdiger Plantikohttp://www.blogger.com/profile/02393666282077884370noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-7017123333978978050.post-86570055528441843312018-01-03T14:44:33.063+01:002018-01-03T14:44:33.063+01:00Hi Dimitry,
for parsing or creating CSV files, a...Hi Dimitry, <br /><br />for parsing or creating CSV files, as described in this blog, you only need Z_READ_CSV, Z_WRITE_CSV (and Z...CSV_ROW to do it on single row level). You won't need the function module Z_EXCEL_IMPORT. Actually, this function module was not present back in 2009 when I wrote the above blog post. You will meet further dependencies like ZCL_XLSX_PARSER if you insist on having the function module Z_EXCEL_IMPORT. If you are interested in parsing or creating .xlsx files, you may use the package <a href="https://wiki.scn.sap.com/wiki/display/ABAP/abap2xlsx" rel="nofollow">abap2xlsx</a> as originated by Ivan Femia and maintained by the ABAP community (actually, the function module Z_EXCEL_IMPORT in which you are interested is just a wrapper for abap2xlsx, so you may also call the classes of that package directly), or you may use other classes like CL_XLSX_DOCUMENT. <br /><br />Hope this helps,<br />RüdigerRüdiger Plantikohttps://www.blogger.com/profile/02393666282077884370noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-23300537391243386702018-01-03T10:52:29.169+01:002018-01-03T10:52:29.169+01:00Hello Rüdiger,
I'm trying to install the func...Hello Rüdiger,<br /><br />I'm trying to install the function group ZUTIL_EXCEL in our system (http://bsp.mits.ch/code/fugr/ZUTIL_EXCEL). In the function module Z_EXCEL_IMPORT I notice a reference to the function Z_EXCEL_IMPORT_WITH_ABAP2XLSX that does not seem to be present the FG ZUTIL_EXCEL. Could you please give a hint where I can find the mentioned module?<br /><br />Thanks a lot!<br />DmitryAnonymoushttps://www.blogger.com/profile/14242926844620417731noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-47923991639635368372011-09-13T08:05:41.867+01:002011-09-13T08:05:41.867+01:00Hallo Holgi,
schön, dass Dir der Z_READ_CSV gefä...Hallo Holgi, <br /><br />schön, dass Dir der Z_READ_CSV gefällt.<br /><br />Den Baustein Z_GET_FIELDNAMES hättest Du im übrigen in unserer Funktionsgruppe ZUTIL gefunden: http://bsp.mits.ch/code/fugr/zutil<br /><br />Ach so, Deine Routine läuft in 4.6C? Schön - der Baustein Z_GET_FIELDNAMES läuft allerdings auch auf 3.0F ;-)<br /><br />Gruss,<br />RüdigerRüdiger Plantikohttps://www.blogger.com/profile/02393666282077884370noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-33511870064732703902011-09-12T20:51:20.065+01:002011-09-12T20:51:20.065+01:00... viel Spaß noch beim Bloggen.
Viele Grüße Holgi...... viel Spaß noch beim Bloggen.<br />Viele Grüße HolgiAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-5120215516102685752011-09-12T20:46:03.216+01:002011-09-12T20:46:03.216+01:00Hi Rüdiger,
über diesen Blog bin ich auf den FuBa ...Hi Rüdiger,<br />über diesen Blog bin ich auf den FuBa Z_READ_CSV gestoßen - den ich produktiv nutze: Kompliment. An Stelle des Fuba Z_GET_FIELDNAMES setze ich folgendes Upro ein (läuft ab Rel. 4.6 C):<br />FORM get_fieldnames <br />USING fs_line TYPE any<br />CHANGING ft_fname TYPE ttfieldname.<br /> DATA:<br /> lo_dscr TYPE REF TO cl_abap_structdescr.<br /> FIELD-SYMBOLS:<br /> TYPE abap_compdescr.<br /> lo_dscr ?= cl_abap_typedescr=>describe_by_data( fs_line ).<br /> IF sy-subrc <> 0.<br />* ... 2 do E-Message<br /> ENDIF.<br /> LOOP AT lo_dscr->components ASSIGNING .<br /> APPEND -name TO ft_fname.<br /> ENDLOOP.<br />ENDFORM.<br />...Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-22209707591710044572010-09-24T10:30:00.056+01:002010-09-24T10:30:00.056+01:00Hallo Alexej,
freut mich zu lesen, dass es für Ex...Hallo Alexej,<br /><br />freut mich zu lesen, dass es für Excel 2003 im wesentlichen funktioniert!<br /><br />Danke für die Info und die (harmlose) Korrektur, die wohl in bestimmten Situationen einen Kurzdump für den "unzulässigen Teilfeldzugriff" verhindert.<br /><br />Habe sie gleich übernommen.<br /><br />Gruss,<br />RüdigerRüdiger Plantikohttps://www.blogger.com/profile/02393666282077884370noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-76610450821177985212010-09-24T10:22:36.800+01:002010-09-24T10:22:36.800+01:00Hallo Rüdiger,
ich habe jetzt die Funktion Z_EXCE...Hallo Rüdiger,<br /><br />ich habe jetzt die Funktion Z_EXCEL_TO_INTERNAL_TABLE zum Laufen gebracht.<br /><br />Ich musste im Makro _get_string eine IF-Abfrage einbauen und schon klappte es:<br /><br />if lv_m_skip > 0.<br /> concatenate lv_m_string lv_m_text50(lv_m_skip) into lv_m_string.<br />endif.<br /><br />Eine ziemlich umfangreiche Excel 2003 Datei wurde fast fehlerfrei eingelesen. Lediglich Zellen mit bedingter Formatierung werden etwas falsch ausgelesen. Einfache XLS-Dateien ohne komplizierte Formatierungen werden fehlerfrei bearbeitet.<br /><br />Also nochmals vielen Dank für die Hilfe!<br /><br />Gruß,<br />AlexejUnknownhttps://www.blogger.com/profile/12057342110324757447noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-81949565805211628152010-09-24T08:21:27.051+01:002010-09-24T08:21:27.051+01:00Es funktioniert (mittlerweile)! Habe den Datentyp ...Es funktioniert (mittlerweile)! Habe den Datentyp ty_text1024_tab vollständig aus der Funktionsgruppe entfernt und durch stringtab ersetzt.Rüdiger Plantikohttps://www.blogger.com/profile/02393666282077884370noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-50500549559243415312010-09-24T08:02:00.468+01:002010-09-24T08:02:00.468+01:00Hallo Alexej,
den Baustein zum nativen Einlesen ...Hallo Alexej, <br /><br />den Baustein zum nativen Einlesen einer Excel-Datei habe ich im September 2002 geschrieben. Er funktioniert für einfache, nicht zu grosse Exceldateien. Mit einem Unittest, der eine binäre Datei ( http://bsp.mits.ch/code/prog/ZUTIL_EXCEL_TESTDATA ) einliest, habe ich dies für immer festgehalten.<br /><br />Die grossen Macros, die ich darin verwende, entsprechen nicht mehr meinem heutigen Programmiergeschmack. Ich hatte sie damals aus Performancegründen verwendet, um zu verhindern, dass für jeden Aufruf eine neue Stackebene aufgebaut wird. Aber Macros sollten nach meinem Geschmack nicht mehr als höchstens zehn Zeilen umfassen. Und <i>bloss vermutete Performanceprobleme</i> merkt man sich besser nur vor, um sich nach Fertigstellung der Funktion mit einer SE30-Analyse Klarheit darüber verschafft, wo wirklich die meiste Laufzeit verbraucht wird.<br /><br />Da dieser Baustein - im Gegensatz zum CSV-Leserich - jedoch nie produktiv eingesetzt wurde, kann ich nicht sagen, ob er für neuere Excel-Versionen, die seitdem eingeführt wurden, auch noch funktioniert. <br /><br />ty_text1024_tab musste ich nehmen, weil die Methode cl_gui_frontend_services=>gui_upload damals keine Tabellen mit "tiefen" Zeilenstrukturen akzeptierte, wozu auch der Datentyp String gehörte. Wenn Du es ausprobiert hast und es anscheinend mittlerweile geht, werde ich auch auf stringtab umstellen. <br /><br />stringtab ist ein eingebauter DDIC-Typ für "standard table of string", Teil von SAP_BASIS, also auf jedem SAP-System verwendbar. So sparst Du Dir die Definition eines eigenen Typs komplett.<br /><br />Jedenfalls danke für den Hinweis,<br />Gruss,<br />RüdigerRüdiger Plantikohttps://www.blogger.com/profile/02393666282077884370noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-79139797336026738102010-09-24T07:00:47.002+01:002010-09-24T07:00:47.002+01:00Hallo Rüdiger,
danke für die schnelle Antwort.
D...Hallo Rüdiger,<br /><br />danke für die schnelle Antwort.<br /><br />Dein CSV-Parser läuft prima und ich wollte einfach gleich mal die andere Funktion zum Einlesen einer nativen Excel-Datei ausprobieren.<br /><br />Ansonsten habe ich Deinen Blog sofort in meine Favoritenliste aufgenommen. :)<br /><br /><br />P.S.<br />Ich habe einen kleinen Verbesserungsvorschlag. Damit die Funktion Z_READ_CSV biliebig große Felder lesen kann, habe ich im LZUTIL_EXCELTOP Definition von ty_text1024_tab wie folgt abgeändert:<br /><br />ty_text1024_tab TYPE STANDARD TABLE OF string<br /><br />(richtigerweise sollte ty_text1024 natürlich umbenannt werden) <br /><br />Gruß AlexejUnknownhttps://www.blogger.com/profile/12057342110324757447noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-9714411609108012792010-09-24T06:58:40.785+01:002010-09-24T06:58:40.785+01:00Dieser Kommentar wurde vom Autor entfernt.Unknownhttps://www.blogger.com/profile/12057342110324757447noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-19420782725993203822010-09-23T20:01:00.631+01:002010-09-23T20:01:00.631+01:00Hallo Alexej,
Gegenfrage: Wozu brauchst Du die? ...Hallo Alexej, <br /><br />Gegenfrage: Wozu brauchst Du die? Die Struktur wird für den in diesem Blog beschriebenen Konverter CSV->ABAP nicht benötigt (sondern für einen anderen Funktionsbaustein der Funktionsgruppe).<br /><br /><br />Aber bitte, hier das ABAP-Äquivalent dieser DDIC-Strukturen:<br /><br />types: begin of zexcel, <br /> cells type zexcelcelltab, <br /> strings type zexcelstringtab, <br /> float type zexcelfloattab, <br /> int type zexcelinttab, <br /> end of zexcel,<br /> begin of zexcelcell,<br /> row(2) type x,<br /> col(2) type x,<br /> typ(1) type c,<br /> ref(4) type x,<br /> end of zexcelcell,<br /> zexcelcelltab type hashed table of zexcelcell<br /> with unique key row col,<br /> zexcelstringtab type standard table of string,<br /> zexcelfloattab type standard table of f,<br /> zexcelinttab type standard table of int4.<br /><br />Gruss,<br />RüdigerRüdiger Plantikohttps://www.blogger.com/profile/02393666282077884370noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-64954534114144786932010-09-23T12:44:08.244+01:002010-09-23T12:44:08.244+01:00Hallo Rüdiger,
könntest Du bitte noch die Struktu...Hallo Rüdiger,<br /><br />könntest Du bitte noch die Strukturen ZEXCEL und ZEXCELCELL darstellen? Danke!<br /><br />Gruß AlexejUnknownhttps://www.blogger.com/profile/12057342110324757447noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-49128836852805132362009-07-24T09:19:14.297+01:002009-07-24T09:19:14.297+01:00Hallo Rüdiger,
funktioniert super! Danke.
Viele ...Hallo Rüdiger,<br /><br />funktioniert super! Danke.<br /><br />Viele Grüße,<br />AlexAlexhttps://www.blogger.com/profile/17992640038427160146noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-71069570088113996842009-07-24T06:01:43.596+01:002009-07-24T06:01:43.596+01:00Hallo Alex,
da hast Du Dir den Code aber schon s...Hallo Alex, <br /><br />da hast Du Dir den Code aber schon sehr genau angeschaut! ZSRS_REF ist eine Struktur, die einen Namen und einen Zeiger auf ein beliebiges Datenobjekt enthält. In unserem System ist sie im DDIC definiert. Du kannst sie aber ersatzweise aber auch im ABAP-Code als Typ definieren wie folgt:<br /><br />types: begin of zsrs_ref,<br /> name type parname,<br /> ref type ref to data,<br />end of zsrs_ref. <br /><br />Die Funktionsgruppe enthält auch noch Code zum Einlesen einer nativen Excel-Datei (also xls). Diesen Teil würde ich an Deiner Stelle ignorieren - mach lieber eine Funktionsgruppe, die sich nur mit CSV auskennt.Rüdiger Plantikohttps://www.blogger.com/profile/02393666282077884370noreply@blogger.comtag:blogger.com,1999:blog-7017123333978978050.post-58777672499575902192009-07-23T20:24:38.674+01:002009-07-23T20:24:38.674+01:00Hi Rüdiger,
perfekte Programmierarbeit! Leider ha...Hi Rüdiger,<br /><br />perfekte Programmierarbeit! Leider habe auch nichts vergleichbares von der SAP gefunden.<br />Ich benötige dringend die Funktionalität von Z_READ_CSV.<br />An einem Punkt komme ich nicht weiter: wie sieht denn die Referenztabelle zsrs_ref aus?<br />Danke, Viele Grüße AlexAlexhttps://www.blogger.com/profile/17992640038427160146noreply@blogger.com