CSV-Werte in Excel Vorlage einfügen Wurde mithilfe eines VBA-Makros umgesetzt Zur Ausführung auf Entwicklertools > Makros und das Makro Dynamik2 auswählen Daraufhin kommt man in ein Suchfenster, mit dem man die gewünschte CSV-Datei auswählen kann Die Werte, die übertragen werden sollen, werden automatisch kopiert und in die Zellen eingefügt Welche Werte genau aus der CSV kopiert und in welche Zellen diese eingefügt werden, wurde schon im Makro bestimmt o Funktioniert nur für CSV Dateien mit gleichem Aufbau, da sonst die falschen Werte übertragen werden o quellen = Array("2,1") -> Zeile 2 und Spalte1 o zielZellen = Array("D13 ") Bsp. bei dem der Wert aus der 2. Zeile an 1. Stelle in die Excel-Zelle D13 übertragen wird o Um diese zu verändern, muss man die Zellen im Code umschreiben. Das entstehende Dokument mit den eingefügten Werten wird automatisch gespeichert o Das Speichern der Datei in einen OneDrive oder Sharepoint Ordner funktioniert nur, wenn eine Verknüpfung des Ordners da ist o Der Pfad dafür ist auch im Code und kann jederzeit geändert werden o Wenn man es in einem OneDrive Ordner speichert, wird der Benutzer automatisch erfasst und in den gegebenen Ordner eingefügt o Falls der Ordner nicht existiert, wird er erstellt Der Code erkennt sowohl Semikolon als auch Kommas als Trennzeichen Nachdem das Makro ausgeführt wurde, kommt eine Nachricht bei der gefragt wird, ob man die Datei ohne Makros speichern möchte o Auf „Ja“ tippen Allgemeines zu Power Automate Unterstützt den Nutzer in der Erstellung von sog. „Flows“ o Flows automatisieren Prozesse o Bsp.: Wenn eine Datei in einen OneDrive Ordner gespeichert wird, soll diese Datei in einen SharePoint Ordner kopiert werden o Anstatt das man das manuell macht, wird es automatisch durch diesen Flow erstellt Jeder Flow wird durch einen Auslöser aktiviert , z.B. Wenn eine Datei in einem OneDrive Ordner erstellt, wird Mit Aktionsblöcken/Konnektor sagt man dem Flow, was er machen soll Je nachdem welcher Block verwendet wird, müssen bestimmt Parameter mitgegeben werden o Entweder gibt man feste Parameter mit o Oder man fügt dyn. Parameter mit, die sich auf vorherige Blöcke beziehen und sich an diese anpassen o Man muss genau aufpassen, welche Auslöser man verwendet, da der Flow nicht aktiviert wird, da diese nur für ganz bestimmte Situationen gelten Datei in SharePoint hochladen Durch Power Automate erstellt Bestimmter Ordner wird überwacht o Funktioniert nur auf OneDrive oder SharePoint Ordnern Wenn eine neue Datei erstellt wird, aktiviert sich das System automatisch o wenn eine Datei nur verändert oder verschoben wurde, aktiviert sich das System nicht o In dem Fall der Ordner „Testordner“ o Das Intervall in welchem der Ordner geprüft wird, kann auch selbst festgelegt werden, aber es muss min. 15 Sekunden betragen Dateiinhalt wird automatisch aufgerufen o Das „Path“ ist ein dynamisches Element, dass sich je nach dem Pfad des erstellten Dokuments ändert – wie eine Variable o Das System erfasst also in welchem Ordnen, die Datei erstellt wurde und dieser Pfad wird dann automatisch eingefügt Daraufhin wird das Dokument in einen vorher ausgewählten Sharepoint Ordner hochgeladen o Dabei muss die Url angegeben werden und der Dateipfad o „Name“ und „File content“ sind auch dynamische Inhalte, da sie den Namen bzw. Dateiinhalt aus der erfassten Datei automatisch entnehmen Wichtig ist, dass man für den Sharepoint die nötigen Bearbeitungsrechte hat, sonst funktioniert es nicht E-Mail-Adressen aus einem Dokument rausfiltern und an diese EmailAdressen eine E-Mail senden Mit Power Automate erstellt Überwacht einen bestimmten OneDrive Ordner Dateiinhalt wird erfasst Dateityp wird geprüft – nur csv, sonst wird der Flow beendet Der Dateiinhalt wird in einer Variable gespeichert o Der Dateiinhalt muss als String verfügbar sein, also nur Textdateien (z.b. txt oder csv) Der Dateiinhalt der csv Datei, der in der Variable gespeichert ist, wird nach Zeilenumbrüchen getrennt Jede Zeile durchläuft einzeln eine „apply to each“-Schleife o Dabei wird jede Zeile nochmal, mithilfe von Kommas als Trennzeichen, in einzelne Werte aufgeteilt Diese Werte durchlaufen einzeln eine weitere „apply to each“- Schleife o Es wird mit einer Bedingung geprüft, ob ein @ in dem Wert ist o Wenn ja, dann wird der True-Zweig ausgeführt, sodass eine E-Mail, an diese Person geschickt wird o Wenn nicht, dann wird der nächste Wert geprüft Funktionsweise des Flows wurde mit Notizen in Power Automate im Flow beschrieben Daten aus Sap mittels API übertragen Authentifizierung über Forgerock Tab Key Value Header Body Body Content-Type grant_type scope application/x-www-urlencoded client_credentials sapbtn Unter dem Tab Auth muss „Basic Auth“ ausgewählt sein, um dann die Client-ID als Benutzernamen und den Client-Secret als Passwort verwenden zu können Daraufhin kann man eine Request schicken, um einen Bearer Token als Anfrage zu schicken So ähnlich läuft die Authentifizierung ab Da man sich aber mit der Client ID und dem Client secret anmeldet wird Schritt1 und 2 übersprungen und man sendet direkt die Anfrage für den Token Bei erfolgreichem Authentifizieren erhält man einen Bearer Token, der nach einer bestimmten Zeit abläuft Holen der Daten Mithilfe des erhaltenen Bearer Tokens kann man nun die API nutzen, um die Daten zu holen Wenn man eine passende API und den dazugehörigen API-Proxy Link hat kann man mittels Bruno diese API verwenden Bei dieser Anfrage handelt es sich um eine GET-Request, weshalb auch kein Body mitgegeben werden muss In dem Tab Auth wählt man nun Bearer Token aus, und fügt ihn unten ein Im Tab Params können mögliche Parameter eingefügt werden, wenn man nach etwas Bestimmten sucht 1) und 2) veranschaulichen nochmal, wie die Authentifizierung über Forgerock läuft o Benutzerdaten werden überprüft und ein Bearer Token wird zurückgegeben In den restlichen Schritten wird dann er Token überprüft und wenn er gültig ist, erhält man eine JSON mit den angeforderten Daten o Wenn ein Fehler auftritt, hat man entweder nicht die nötigen Berechtigungen für die API (Fehler 403) oder der Token ist abgelaufen Makro um JSON_Datei zu extrahieren Um die erhaltene JSON extrahieren zu können wird ein Makro in Excel verwendet o So ähnlich wie das Makro, um die Werte aus einer CSV extrahieren zu können Um die JSON-Daten parsen zu können, wurde ein JSON-Parser heruntergeladen und importiert o Er wurde schon in die Excel- Datei importiert, er muss also nicht nochmal heruntergeladen werden o Um ihn zu sehen muss man auf die Makroübersicht unter Entwicklertools > Visual Basic oder mit Alt + F11, dort kann man mit dem Projektexplorer alle Module und den Parser sehen o Er stammt von hier: GitHub - VBA-tools/VBA-JSON: JSON conversion and parsing for VBA Die Datei wird automatisch in den Zielordner gespeichert, dabei wird der User auch automatisch erkannt o Falls der Ordner nicht existiert, wird der Ordner erstellt Weitere Hinweise: Wichtige Makros in Excel: o Dynamik2 o JsonImport o TestJSONParser (importierter Parser wird getestet -> wenn er funktioniert, kommt eine Ausgabemeldung mit dem Inhalt der Json, die im Code ist) Wichtige Flows: o Sharepointupload o Emails aus einer CSV extrahieren Anhänge 1. Code für die Übertragung der CSV-Werte (Dynamik2) 2. Sub Dynamik2() 3. Const ForReading As Integer = 1 4. Dim dateiname As String 5. Dim neue_exceldatei As String 6. Dim zielOrdner As String 7. Dim fso As Object 8. Dim csvFile As Object 9. Dim xlWorkbook As Workbook 10. Dim xlSheet As Worksheet 11. Dim quellen As Variant 12. Dim zielZellen As Variant 13. Dim zeile As String 14. Dim i As Integer 15. Dim fileDialog As fileDialog 16. Dim values() As String 17. Dim csvLines As Variant 18. Dim trennzeichen As String 19. Dim oneDrivePath As String 20. 21. ' Erkenne den OneDrive-Ordner des aktuellen Benutzers 22. oneDrivePath = Environ("OneDriveCommercial") ' Für Firmenaccounts 23. If oneDrivePath = "" Then oneDrivePath = Environ("OneDrive") ' Falls Privat-OneDrive genutzt wird 24. If oneDrivePath = "" Then 25. MsgBox "Fehler: OneDrive-Ordner konnte nicht gefunden werden!", vbCritical 26. Exit Sub 27. End If 28. 29. ' Zielordner festlegen 30. zielOrdner = oneDrivePath & "\Testordner" 31. 32. ' Prüfen und Ordner erstellen, falls er nicht existiert 33. CreateFolderIfNotExists zielOrdner 34. 35. ' Speicherpfad für die neue Datei 36. neue_exceldatei = zielOrdner & "\neue_exceldatei_" & Format(Now, "yyyyMMdd_HHmmss") & ".xlsx" 37. 38. ' Öffne den Dateiauswahldialog, um die CSV-Datei auszuwählen 39. Set fileDialog = Application.fileDialog(msoFileDialogFilePicker) 40. fileDialog.Title = "Wähle die CSV-Datei aus" 41. fileDialog.Filters.Clear 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. fileDialog.Filters.Add "CSV-Dateien", "*.csv", 1 If fileDialog.Show = -1 Then dateiname = fileDialog.SelectedItems(1) Else MsgBox "Keine Datei ausgewählt!", vbExclamation Exit Sub End If ' CSV-Daten laden Set fso = CreateObject("Scripting.FileSystemObject") Set csvFile = fso.OpenTextFile(dateiname, ForReading) csvLines = Split(csvFile.ReadAll, vbCrLf) csvFile.Close If UBound(csvLines) >= 0 Then zeile = csvLines(0) ' Erste Zeile der CSV-Datei If Len(zeile) - Len(Replace(zeile, ",", "")) > Len(zeile) - Len(Replace(zeile, ";", "")) Then trennzeichen = "," Else trennzeichen = ";" End If Else MsgBox "Die CSV-Datei ist leer.", vbExclamation Exit Sub End If ' Verwende das aktuell geöffnete Workbook Set xlWorkbook = ActiveWorkbook Set xlSheet = xlWorkbook.Sheets(1) ' Beispiel: Zuweisung der Werte zu bestimmten Zellen quellen = Array("2,1", "2,2", "3,3", "1,3", "4,1", "5,2", "4,4", "5,3", "1,5", "3,4", "2,4") zielZellen = Array("D13", "F13", "C16", "D16", "C18", "E18", "C21", "D21", "E21", "C24", "C32") For i = LBound(quellen) To UBound(quellen) Dim cellParts() As String Dim rowNum As Long, colNum As Long cellParts = Split(quellen(i), ",") rowNum = CLng(cellParts(0)) colNum = CLng(cellParts(1)) If rowNum <= UBound(csvLines) + 1 Then zeile = csvLines(rowNum - 1) values = Split(zeile, trennzeichen) If colNum <= UBound(values) + 1 Then With xlSheet.Range(zielZellen(i)) .Value = Trim(values(colNum - 1)) .Interior.Color = RGB(255, 255, 255) End With Else MsgBox "Spalte " & colNum & " existiert nicht in Zeile " & rowNum, vbExclamation End If Else MsgBox "Zeile " & rowNum & " existiert nicht in der CSV-Datei.", vbExclamation End If Next i ' Datei speichern On Error GoTo SaveError xlWorkbook.SaveAs Filename:=neue_exceldatei, FileFormat:=xlOpenXMLWorkbook MsgBox "Die neue Excel-Datei wurde erfolgreich gespeichert unter:" & vbCrLf & neue_exceldatei, vbInformation ' Aufräumen Set xlSheet = Nothing 109. Set xlWorkbook = Nothing 110. Set fso = Nothing 111. Exit Sub 112. 113. SaveError: 114. MsgBox "Fehler beim Speichern der Datei: " & Err.Description, vbCritical 115. Exit Sub 116. End Sub 117. 118. ' Funktion zur Erstellung eines Ordners, falls er nicht existiert 119. Sub CreateFolderIfNotExists(folderPath As String) 120. Dim fso As Object 121. Set fso = CreateObject("Scripting.FileSystemObject") 122. If Not fso.FolderExists(folderPath) Then 123. fso.CreateFolder folderPath 124. End If 125. End SubCode für die Übertragung der Json-Werte (JsonImport) Sub JSONImport() Const ForReading As Integer = 1 Dim dateiname As String Dim neue_exceldatei As String Dim zielOrdner As String Dim fso As Object Dim jsonFile As Object Dim jsonText As String Dim jsonData As Object Dim wb As Workbook Dim ws As Worksheet Dim jsonKeys As Variant Dim zielZellen As Variant Dim i As Integer Dim timestamp As String Dim fileDialog As fileDialog Dim resultItem As Object Dim results As Object Dim oneDrivePath As String ' OneDrive-Ordner erkennen oneDrivePath = Environ("OneDriveCommercial") ' Firmen-OneDrive If oneDrivePath = "" Then oneDrivePath = Environ("OneDrive") ' Privat-OneDrive If oneDrivePath = "" Then MsgBox "Fehler: OneDrive-Ordner konnte nicht gefunden werden!", vbCritical Exit Sub End If ' Zielordner setzen zielOrdner = oneDrivePath & "\Testordner" CreateFolderIfNotExists zielOrdner ' Speicherpfad für die neue Datei timestamp = Format(Now, "yyyyMMdd_HHmmss") neue_exceldatei = zielOrdner & "\neue_exceldatei_" & timestamp & ".xlsx" ' JSON-Datei auswählen Set fileDialog = Application.fileDialog(msoFileDialogFilePicker) fileDialog.Title = "Wähle die JSON-Datei aus" fileDialog.Filters.Clear fileDialog.Filters.Add "JSON-Dateien", "*.json", 1 If fileDialog.Show = -1 Then dateiname = fileDialog.SelectedItems(1) Else MsgBox "Keine Datei ausgewählt!", vbExclamation Exit Sub End If ' JSON-Datei laden Set fso = CreateObject("Scripting.FileSystemObject") Set jsonFile = fso.OpenTextFile(dateiname, ForReading) jsonText = jsonFile.ReadAll jsonFile.Close ' JSON parsen (VBA-JSON benötigt) On Error GoTo ParseError Set jsonData = JsonConverter.ParseJson(jsonText) On Error GoTo 0 ' Daten unter "d" -> "results" holen (erster Eintrag) Set results = jsonData("d")("results") Set resultItem = results(1) ' Aktives Workbook und Arbeitsblatt Set wb = ActiveWorkbook Set ws = wb.Sheets(1) ' JSON-Schlüssel und Zielzellen jsonKeys = Array("SalesSchedulingAgreement", "SalesSchedgAgrmtType", "CreatedByUser", _ "LastChangedByUser", "CreationDate", "CreationTime", "LastChangeDate", _ "LastChangeDateTime", "SalesOrganization", "DistributionChannel", "OrganizationDivision") zielZellen = Array("D13", "F13", "C16", "D16", "C18", "E18", "C21", "D21", "E21", "C24", "C32") ' JSON-Werte übertragen For i = LBound(jsonKeys) To UBound(jsonKeys) If resultItem.Exists(jsonKeys(i)) Then With ws.Range(zielZellen(i)) .Value = resultItem(jsonKeys(i)) .Interior.Color = RGB(255, 255, 255) End With Else MsgBox "Schlüssel '" & jsonKeys(i) & "' wurde nicht gefunden!", vbExclamation End If Next i ' Datei speichern On Error GoTo SaveError wb.SaveAs Filename:=neue_exceldatei, FileFormat:=xlOpenXMLWorkbook MsgBox "Die neue Excel-Datei wurde erfolgreich gespeichert unter:" & vbCrLf & neue_exceldatei, vbInformation ' Aufräumen Set ws = Nothing Set wb = Nothing Set fso = Nothing Exit Sub ParseError: MsgBox "Fehler beim Parsen der JSON-Daten: " & Err.Description, vbCritical Exit Sub SaveError: MsgBox "Fehler beim Speichern der Datei: " & Err.Description, vbCritical Exit Sub End Sub ' Funktion zur Erstellung des Ordners, falls er nicht existiert Sub CreateFolderIfNotExists(folderPath As String) Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists(folderPath) Then fso.CreateFolder folderPath End If End Sub
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )