Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: API auslesen

API auslesen
20.02.2023 07:40:59
Pieter
Hey, ich möchte eine API
*https://datenservice.tradinghub.eu/XmlInterface/getXML.ashx?ReportId=PricesEnergyImbalance&Start=01-10-2021&End=31-10-2021*
gerne in meine Datenbnak speichern, wie mache ich das am geschicktesten.
Sprich, jeden Tag soll die API aktuallisiert werden und alle noch nicht enhaltene Daten in die Datenbank.
Hab dazu leider noch keine Vorstellung - bitte um Hilfe
merci
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: API auslesen
20.02.2023 10:14:51
ChrisL
Hi
Menü Daten, Daten Abrufen, aus dem Web
Als Zeitraum gibst du einfach ein Datum in der Zukunft an z.B.
Start=01-01-2021&End=31-12-2099
Also kein Abgleich mit bestehenden Daten, sondern alles wird neu aufgebaut.
cu
Chris
AW: API auslesen
20.02.2023 13:02:50
Pieter
Zunächst Danke für die Antwort,
ich meinte in richtung VB Programmierung bzw SQL-Automatisierung
Automatisch die Daten in die SQL Datenbank
Anzeige
AW: API auslesen
20.02.2023 13:30:38
ChrisL
Hi
In den Abfrageeigenschaften, Definition, Befehlstext steht:
SELECT * FROM [PricesEnergyImbalnce]
So gesehen erfolgt das Auslesen/Selektieren bereits über ein SQL-Statement.
Wie ich verstehe, möchtest du aber nicht nur lesen, sondern auch schreiben. In Bezug auf das SQL-Statement könntest du vor der Gesamt-Selektion einfach die Tabelle leeren: DELETE FROM Tabelle1
(JOIN für die Differenz alt/neu und UPDATE scheint mir unnötig kompliziert)
Was ich gar nicht nachvollziehen kann, weshalb man Excel verwenden würde, um externe Daten aus dem Web in eine externe SQL-DB zu überführen. Excel müsste die Daten erst "auspacken", um sie frisch "verpackt" in die externe DB zu überführen. Sollte es gute Gründe geben, um die Daten zuerst in Excel einzulesen, dann kannst du es ja auch wie beschrieben über die Standardfunktionalität selektieren. Damit wärst du ein Problem los und müsstest dich nur noch um das UPDATE der DB kümmern.
cu
Chris
Anzeige
AW: API auslesen
20.02.2023 17:17:25
ChrisL
Hi
Also gut...
Wenn es unbedingt SQL sein soll, hier ein Beispiel.
Die XML-Datei wird wie beschrieben über eine Webabfrage gelesen und in die Excel-Datei Tabelle1 importiert.
Excel-Tabelle1 wird gelesen (SELECT *)
Weil ich keine SQL-DB zur Hand habe, habe ich es in eine Access-Datei übertragen. Bedeutet der Connection-String muss für die SQL-DB modifiziert werden.
Den Tabelleninhalt der Access Tabelle lösche ich zuerst komplett.
Danach erfolgt ein zeilenweiser Übertrag, wobei ich nur die ersten 3 Felder übertrage (muss noch ergänzt werden).
Es zeigt einfach die Möglichkeiten, speziell ADODB (für SQL) auf. Ob man es so oder anders machen will, ist ein anderes Thema.
cu
Chris
Sub t()
Dim objConQuelle As Object, objConZiel As Object
Dim objRsQuelle As Object
Set objConQuelle = CreateObject("ADODB.Connection")
objConQuelle.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0 Xml;HDR=YES';"
Set objRsQuelle = objConQuelle.Execute("SELECT * FROM [Tabelle1$]")
Set objConZiel = CreateObject("ADODB.Connection")
objConZiel.Open "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=C:\Pfad\Database1.accdb"
objConZiel.Execute ("DELETE FROM Tabelle1")
objRsQuelle.MoveFirst
Do Until objRsQuelle.EOF
    objConZiel.Execute ("INSERT INTO Tabelle1 ([Gasday],[PositiveEnergyImbalancePrice],[NegativeEnergyImbalancePrice]) VALUES ('" & objRsQuelle.Fields("Gasday").Value & "'," & objRsQuelle.Fields("PositiveEnergyImbalancePrice").Value & "," & objRsQuelle.Fields("NegativeEnergyImbalancePrice").Value & ")")
    objRsQuelle.MoveNext
Loop
objRsQuelle.Close
Set objRsQuelle.ActiveConnection = Nothing
objConQuelle.Close
Set objConQuelle = Nothing
objConZiel.Close
Set objConZiel = Nothing
End Sub

Anzeige
AW: API auslesen
21.02.2023 14:32:31
Pieter
Zunächst Danke für die Mühe!!
Ist es möglich Über SQL direkt die daten automatisch in der Datenbank zu aktualisieren ?
AW: API auslesen
21.02.2023 14:55:07
ChrisL
Hi
Nach meinem Verständnis ist eine XML-Datei keine klassische Datenbank und kann daher nicht konventionell über SQL gelesen werden. Daher glaube ich, wenn du über Excel gehen willst, müsstest du die Daten zuerst über ein anderes Mittel holen. Hierfür scheint mir die beschriebene Standardfunktionalität bestens geeignet.
In anderen Umgebungen stehen andere Mittel zur Verfügung. Gemäss eine kurzen Recherche sollte es für Microsoft SQL Server die Methode T-SQL bzw. das Statement OPENROWSET geben. Genauer kenne ich mich damit aber nicht aus.
Schlussendlich, wie bereits ursprünglich angedeutet, verstehe ich einfach nicht was du willst bzw. wozu der Handstand gut sein soll. Mit der Aktion duplizierst du bereits existierende/zugängliche Daten. Ginge es um eine Auswertung, müsste man die Daten nicht duplizieren und könnte einfach auf der Webabfrage eine Auswertung aufbauen. Wenn es für eine andere Anwendung benötigt wird, dann würde man die entsprechende Anwendung (z.B. SQL-Server) zum Datenübertrag verwenden und nicht Excel.
cu
Chris
Anzeige
AW: API auslesen
23.02.2023 07:37:50
Pieter
Der Grund für das ganze ist:
Ich nehme mir die Daten aus dem Web, möchte diese auch "Archivieren" und möchte später auf die Daten Zugreifen können für Berechnungen.
Wenn ich mir die Daten nur aus dem Web ziehe, habe ich Sie nicht Archiviert deshalb der große Umweg mit :
Daten vom Web ( XML-Format, dar nur XML angeboten wird) aus dem Web ziehen und die dann in meine Datenbank zu packen.
Nun die Frage wie ich das am sinvollsten automatisch machen kann :))))))
Anzeige
AW: API auslesen
23.02.2023 08:52:14
ChrisL
Hi
Man könnte einfach die XML-Datei archivieren. Hierzu schlägt ChatGPT folgenden Code vor:
Sub SaveUrlAsXml()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://datenservice.tradinghub.eu/XmlInterface/getXML.ashx?ReportId=PricesEnergyImbalance&Start=01-10-2021&End=31-10-2099", False
    http.Send
    
    Dim resp As String
    resp = http.responseText
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim file As Object
    Set file = fso.CreateTextFile("C:\Users\CH00LNC\Desktop\file.xml", True)
    file.Write resp
    file.Close
    
    Set file = Nothing
    Set fso = Nothing
    Set http = Nothing
End Sub
Oder du nutzt die Webabfrage und kopierst das Ergebnis, damit es von der Datenverbindung "entkoppelt" wird:
wksQuelle.ListObjects("Tabelle-Abfrageresultat").Range.Copy wksZiel.Range("A1")
cu
Chris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

API-Daten automatisiert in Excel und SQL integrieren


Schritt-für-Schritt-Anleitung

  1. Webabfrage in Excel einrichten:

    • Öffne Excel und gehe zu Daten > Daten abrufen > Aus dem Web.
    • Gib die URL der API ein:
      https://datenservice.tradinghub.eu/XmlInterface/getXML.ashx?ReportId=PricesEnergyImbalance&Start=01-10-2021&End=31-10-2099
    • Wähle die gewünschten Daten aus und klicke auf Laden.
  2. SQL-Datenbank vorbereiten:

    • Stelle sicher, dass du eine SQL-Datenbank hast, in die die Daten übertragen werden sollen. Du kannst eine Access-Datenbank oder einen SQL Server verwenden.
  3. VBA-Skript erstellen:

    • Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu.
    • Verwende den folgenden Code, um die API-Daten in die SQL-Datenbank zu übertragen:
      Sub t()
      Dim objConQuelle As Object, objConZiel As Object
      Dim objRsQuelle As Object
      Set objConQuelle = CreateObject("ADODB.Connection")
      objConQuelle.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0 Xml;HDR=YES';"
      Set objRsQuelle = objConQuelle.Execute("SELECT * FROM [Tabelle1$]")
      Set objConZiel = CreateObject("ADODB.Connection")
      objConZiel.Open "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=C:\Pfad\Database1.accdb"
      objConZiel.Execute ("DELETE FROM Tabelle1")
      objRsQuelle.MoveFirst
      Do Until objRsQuelle.EOF
         objConZiel.Execute ("INSERT INTO Tabelle1 ([Gasday],[PositiveEnergyImbalancePrice],[NegativeEnergyImbalancePrice]) VALUES ('" & objRsQuelle.Fields("Gasday").Value & "'," & objRsQuelle.Fields("PositiveEnergyImbalancePrice").Value & "," & objRsQuelle.Fields("NegativeEnergyImbalancePrice").Value & ")")
         objRsQuelle.MoveNext
      Loop
      objRsQuelle.Close
      Set objRsQuelle.ActiveConnection = Nothing
      objConQuelle.Close
      Set objConQuelle = Nothing
      objConZiel.Close
      Set objConZiel = Nothing
      End Sub
  4. Automatisierung der Datenaktualisierung:

    • Um die Daten täglich zu aktualisieren, kannst du das Skript in eine geplante Aufgabe (Windows Task Scheduler) einfügen.

Häufige Fehler und Lösungen

  • Fehler: Daten werden nicht geladen
    Lösung: Überprüfe die API-URL auf Korrektheit und stelle sicher, dass du eine Internetverbindung hast.

  • Fehler: Verbindung zur SQL-Datenbank schlägt fehl
    Lösung: Vergewissere dich, dass der Connection-String korrekt ist und die Datenbank existiert.

  • Fehler: Excel kann die API nicht abrufen
    Lösung: Stelle sicher, dass du die richtige Excel-Version verwendest, die Webabfragen unterstützt.


Alternative Methoden

  • Direktes SQL-Abfragen mit T-SQL:
    Anstatt die Daten in Excel auszulesen, könntest du auch T-SQL verwenden, um die XML-Daten direkt in deine SQL-Datenbank zu importieren. Hierbei könnte das Statement OPENROWSET hilfreich sein.

  • Daten mit Power Query:
    Nutze Power Query in Excel, um eine Abfrage für die API zu definieren und die Daten direkt in eine Tabelle zu importieren.


Praktische Beispiele

  • Beispiel 1: XML-Daten archivieren
    Du kannst die API-Daten in eine XML-Datei speichern:

    Sub SaveUrlAsXml()
      Dim http As Object
      Set http = CreateObject("MSXML2.XMLHTTP")
      http.Open "GET", "https://datenservice.tradinghub.eu/XmlInterface/getXML.ashx?ReportId=PricesEnergyImbalance&Start=01-10-2021&End=31-10-2099", False
      http.Send
      Dim resp As String
      resp = http.responseText
      Dim fso As Object
      Set fso = CreateObject("Scripting.FileSystemObject")
      Dim file As Object
      Set file = fso.CreateTextFile("C:\Users\CH00LNC\Desktop\file.xml", True)
      file.Write resp
      file.Close
    End Sub
  • Beispiel 2: Daten in Excel kopieren
    Um Ergebnisse von einer Abfrage in eine andere Tabelle zu kopieren:

    wksQuelle.ListObjects("Tabelle-Abfrageresultat").Range.Copy wksZiel.Range("A1")

Tipps für Profis

  • Nutze Parameter in der API-URL, um dynamische Abfragen zu ermöglichen. Das macht deine Excel API Abfrage flexibler.

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung in deinem VBA-Skript, um potenzielle Probleme bei der API-Abfrage oder Datenübertragung zu erkennen.

  • Datenbereinigung: Stelle sicher, dass die Daten vor dem Einfügen in die SQL-Datenbank bereinigt werden, um Inkonsistenzen zu vermeiden.


FAQ: Häufige Fragen

1. Kann ich die API auch ohne Excel auslesen?
Ja, du kannst direkt mit SQL Server oder anderen Programmiersprachen wie Python arbeiten, um die API Daten auszulesen.

2. Wie oft kann ich die API abfragen?
Das hängt von den Bedingungen des API-Anbieters ab. Überprüfe die Dokumentation der API für spezifische Limits.

3. Was ist der Vorteil von VBA zur Datenübertragung?
VBA ermöglicht dir, die Datenübertragung zu automatisieren, was Zeit spart und menschliche Fehler reduziert.

4. Kann ich die Daten in ein anderes Format als XML abrufen?
Das hängt von der API ab. Viele APIs bieten verschiedene Formate wie JSON oder CSV an.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige