SAP Jobsuche bei DV-Treff
SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo zusammen,

wie Sie schon aus dem Betreff raus lesen können, versuche ich gerade eine Tabelle/Liste aus SAP, aus der Transaktion IW39, in eine .xlsx Datei in Excel abzuspeichern. Leider kann ich mit dem Recorder nur das .xls Dateiformat abspeichern. Gibt es da eine direktere Lösung anstatt indirekt über VBS oder VBNet. Wenn nein, wie funktioniert es dann darüber? Gegebenenfalls sende ich die Schritte der Vorgänge in der Transaktion.

Danke im Voraus für die Antwort und fröhliche Feiertage.

Mit freundlichen Grüßen

Förderer

newgui
vor 6 Jahre
Hallo,

also hab mal kurz in die Transaktion gesehen (arbeite eig. nicht damit).

Zumindest bei uns gibt es die Möglichkeit über Liste - Sichern - Datei den Abruf zu speichern. Dort kannst du sowohl den Pfad als auch die Datei hinterlegen.

Diesen Vorgang kannst du über guixt aufzeichnen und dann mittels Button durchführen lassen.

Also ich habe das schon sehr oft gemacht und das hat jedes mal noch geklappt.

mfg

newgui

SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo newgui,

vielen Dank für deine Antwort. Diesen Vorgang habe ich auch schon versucht aber man kann die Tabelle damit nur im .xls-Format abspeichern. Ich brauche es aber im .xlsx-Format, da ich die Tabelle im Nachhinein mit Access auslese. Deswegen dürfen die Spalten sich nicht verschieben. Ich habe gelesen, dass man dafür VBS Vbnet einbinden muss. Funktioniert es auch alternativ direkter und einfacher? wenn Nein, wie könnte es dann damit funktionieren?

Liebe Grüße

SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo frohes, neues Jahr

hat jemand vielleicht nach den Feiertagen eine Lösung auf meine Frage? 🙂

Liebe Grüße

SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo,

Auf jeden Fall klappt es mit dem Abspeichern einer (.xls) Datei im Laufwerk per pushbuttonklick. Kurz zur Problemstellung wieso ich unbedingt drauf bestehe eine (.xlsx) Datei abspeichern zu können. Da unsere Access Datenbank sich die Daten von der abgespeicherten Exceltabelle zieht, dürfen sich die Spalten nicht verschieben, was hier der Fall wäre. Hier mein Skript:

// SAP Easy Access - Benutzermenü für SzPGuiXT

Screen SAPLSMTR_NAVIGATION.0100

Enter "iw39"

// IH-Aufträge anzeigen: Selektion Aufträge

Screen RIAUFK20.1000

Enter "/17" // Holen...

// Variante suchen

Screen SAPLSVAR.0100

Set F[Variante] "0_IHC_AUFTRÄGE"

Set F[Erstellt von] ""

Enter "/8"

// IH-Aufträge anzeigen: Selektion Aufträge

Screen RIAUFK20.1000

Set F[Layout] "/IHC_AUFTRÄG"

Enter "/8" // Ausführen

// IH-Aufträge anzeigen: Liste Aufträge

Screen SAPLSLVC_FULLSCREEN.0500

Enter "/5"

// IH-Aufträge anzeigen: Liste Aufträge

Screen SAPLSLVC_FULLSCREEN.0500

Enter "/Menu=5,5" // Warenbewegungen

// Liste Warenbewegungen zum Auftrag: Liste Warenbewegungen

Screen SAPLSLVC_FULLSCREEN.0500

Enter "/Menu=1,7,3" // Datei...

// Liste sichern in Datei...

Screen SAPLSPO5.0110

Set R[Text mit Tabulatoren] "X"

Enter

// IH-Aufträge anzeigen: Liste Aufträge

Screen SAPLSFES.0200

Set F[Verzeichnis] "C:\SAP_Export"

Set F[Dateiname] "Ersatzteile.xls"

Enter "/11" // Ersetzen

Der letzte Abschnitt ist hierbei Interessant. Danke nochmal im Voraus für die Antwort

ScriptMan
vor 6 Jahre
Hallo SzPGuiXT,

worin besteht die Verschiebung. Ist es die erste leere Spalte oder was ganz anderes? Am besten wäre der Vergleich zwischen IST und SOLL.

Grüße,

ScriptMan

SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo ScriptMan,

IST: (.xls)-Dateiformat; die 1. Spalte der Tabelle/Liste ist die Spalte B in Excel,

SOLL: (.xlsx)-Dateiformat; die 1. Spalte der Tabelle/Liste ist die Spalte A in Excel.

Grüße,

SzPGuiXT

ScriptMan
vor 6 Jahre
Hallo SzPGuiXT,

Zitat:

"Leider kann ich mit dem Recorder nur das .xls Dateiformat abspeichern."

Wie gesagt habe ich keinen Zugriff auf IW39 aber ich vermute, dass sich die Liste dort nicht mal manuell im xlsx-Format abspeichern lässt. Das hat nichts mit dem Recorder zu tun und daher müsste u.U. ein Workaround her.

Dieser könnte wie folgt aussehen:

. . .

// IH-Aufträge anzeigen: Liste Aufträge

Screen SAPLSFES.0200

Set F[Verzeichnis] "C:\SAP_Export"

Set F[Dateiname] "Ersatzteile.xls"

Enter "/11" // Ersetzen

start "&F[Verzeichnis]\xls2xlsx.vbs" parameters="&F[Verzeichnis] &F[Dateiname]"

xls2xlsx.vbs:

If Not IsObject(application) Then

Set SapGuiAuto = GetObject("SAPGUI")

Set application = SapGuiAuto.GetScriptingEngine

End If

If Not IsObject(connection) Then

Set connection = application.Children(0)

End If

set session = application.ActiveSession

PFAD = wscript.arguments(0) & "\" & wscript.arguments(1)

'msgbox PFAD

on error resume next

Set xclApp = GetObject(, "Excel.Application")

If Err.Number <> 0 Then

Err.Clear

Set xclApp = CreateObject("Excel.Application")

End If

xclapp.ScreenUpdating = true

xclapp.Visible = true

xclapp.DisplayAlerts = false

Set xclwbk = xclApp.Workbooks.Open(wscript.arguments(0) & "\xls2xlsx.xlsm")

on error goto 0

xclapp.Run "xls2xlsx.xlsm!xls2xlsx", PFAD

if xclApp.Workbooks.count = 1 then

xclwbk.close

set xclwbk = nothing

xclapp.Quit

set xclapp = nothing

else

xclwbk.close

set xclwbk = nothing

xclapp.DisplayAlerts = true

end if

Makro xls2xlsx in xls2xlsx.xlsm und Modul1:

Sub xls2xlsx(ByVal PFAD As String)

Workbooks.Open Filename:=PFAD

Columns("A:A").Select

Selection.Delete Shift:=xlToLeft

Rows("1:1").Select

Selection.Delete Shift:=xlUp

Rows("2:2").Select

Selection.Delete Shift:=xlUp

Range("A1").Select

ActiveWorkbook.SaveAs Filename:=PFAD & "x", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

ActiveWorkbook.Close

Kill PFAD

End Sub

Fazit:

Das Ergebnis ist eine XLSX-Mappe, in der die 1. Spalte und die 1. und 3. Zeile gelöscht worden sind.

Viel Spaß beim Testen!

Grüße,

ScriptMan

SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo ScriptMan,

die Liste lässt sich schon manuell in eine xlsx abspeichern, indem man die Tabellenkalkulation (Umschalt+F4) benutzt, welche sich mit dem Recorder nur bis zur Exceltabelle aufnehmen lässt aber das Abspeichern nicht. Ich wüsste jetzt auf Anhieb nicht, wie ich Ihnen das noch näher beibringen könnte außer ein Screenshot zu machen. Doch darin sind betriebsbezogene Informationen enthalten. Auf jeden Fall werde ich Ihr Script austesten und berichten. Also um es nochmal klarzustellen: Die 1. Spalte der SAP-Liste bzw. Tabelle SOLL in der Spalte A in Excel beginnen.

Grüße

SzPGuiXT

ScriptMan
vor 6 Jahre
Wir arbeiten aktuell mit der SAP GUI Version 7.4. Dort lässt sich unter ALT/F12 (Lokales Layout anpassen -> Optionen -> Skriptunterstützung -> systemeigene Dialogfenster von Microsoft Windows anzeigen) einstellen, ob die Pfade mit aufgezeichnet werden oder nicht. Bei mir ist dort kein Häkchen, d.h. die Pfade werden aufgezeichnet.

z.B.

. . .

// Auswertung Rechnungseingangsbuch

Screen SAPLSLVC_FULLSCREEN.0500

Enter "%_GC 143 9"

// Auswertung Rechnungseingangsbuch

Screen SAPLSLVC_FULLSCREEN.0500

Enter control="CONTAINERCTRL.GridViewCtrl" item="&XXL" event="13"

// Tabellenkalkulation auswählen

Screen SAPLSLVC_EXPORT_XML.0100

Enter

// Auswertung Rechnungseingangsbuch

Screen SAPLSFES.0200

Set F[Verzeichnis] "c:\tmp"

Set F[Dateiname] "export.XLSX"

Enter "/11" // Ersetzen

Grüße,

ScriptMan

SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo ScriptMan,

Die Tabelle wird als xlsx Datei abgespeichert jedoch mit einer Fehlermeldung:

Script: C:\guixt\scripts\xls2xlsx.vbs

Linie: 31

Char: 1

Error: Object required:'xclwbk'

Code: 800A01A8

Source: Microsoft VBScript runtime error

mein Kollege hat das Makro in Excel geschrieben, welches in Excel nicht gespeichert wird.

Also wurde die 1. und 3. Zeile, die leer sind, noch nicht gelöscht.

Derselbe Kollege hat auch im VBScript etwas verändert, wo sich die Zeilen von Ihrem Skript mit seinem unterscheiden könnten wegen der o. g. Fehlermeldung.

Ich könnte Ihnen Screenshots schicken. Dafür bräuchte ich Ihre Email-Adresse. Hier über das Forum kann ich auch keine Screenshots schicken und Ihr Postfach ist auch voll, sodass ich Ihnen private Mails hierüber schicken könnte. Das ist schonmal ein riesen Fortschritt und sehr Hilfreich. Da fehlt nur noch das i-tüpfelchen 🙂

Ich freue mich schon auf Ihre nächste Antwort

Liebe Grüße

SzPGuiXT

ScriptMan
vor 6 Jahre
Hallo SzPGuiXT,

danke für den Hinweis mit dem Postfach. Ich habe dort Platz gemacht. Die Email-Adresse habe ich bereits per PN übermittelt. Falls nicht angekommen, bitte noch mal melden. Ansonsten müsste man den aktuellen Stand der Skripte / VBA-Programme sehen, um einen Fehler zu lokalisieren.

Grüße,

ScriptMan

SzPGuiXT
  • SzPGuiXT
  • SAP Forum - Neuling Thema Starter
vor 6 Jahre
Hallo ScriptMan,

vielen, lieben Dank für Ihre kompetente Unterstützung.

Es hat alles super geklappt 🙂 Sie sind echt sehr hilfsbereit.

Danke nochmal. :D

Grüße

SzPGuiXT