Warum Nanonets oder Rossum?
Weil OCR alleine nicht reicht.
Du willst keine Bilder, Du willst Felder: Rechnungsnummer, Datum, Betrag.
Nanonets und Rossum liefern Dir genau das.
Per REST. Und damit auch direkt aus Access per VBA.
Was Du brauchst
- API-Key von Nanonets oder Rossum
- Modell (Invoice Extraction)
- PDF-Dateien (Rechnungen)
- Tabellen für Upload, Ergebnis, Fehlerprotokoll
Tabellenstruktur
Tabelle | Zweck |
---|---|
tblRechnungen | Pfade zu PDF-Dateien |
tblFelder | Ausgelesene Werte |
tblFehler | Fehler und Logs |
Variante 1: Nanonets ansprechen
Schritt 1: PDF einlesen und Base64 kodieren
Function LeseDateiAlsBase64(pfad As String) As String
Dim bytes() As Byte
Dim xml As Object
Open pfad For Binary As #1
ReDim bytes(LOF(1) - 1)
Get #1, , bytes
Close #1
Set xml = CreateObject("MSXML2.DOMDocument").createElement("b64")
xml.DataType = "bin.base64"
xml.nodeTypedValue = bytes
LeseDateiAlsBase64 = Replace(xml.Text, vbLf, "")
End Function
Schritt 2: Anfrage an Nanonets
Function AnalysiereMitNanonets(base64PDF As String) As String
Dim http As Object
Dim json As String
Dim apiKey As String
Dim modelID As String
modelID = "DEIN_MODEL_ID"
apiKey = "DEIN_API_KEY"
json = "{" & _
"""file"":""" & base64PDF & """" & _
"}"
Set http = CreateObject("MSXML2.ServerXMLHTTP")
http.Open "POST", "https://app.nanonets.com/api/v2/OCR/Model/" & modelID & "/LabelFile/", False
http.setRequestHeader "Authorization", "Basic " & Base64Encode(apiKey & ":")
http.setRequestHeader "Content-Type", "application/json"
http.Send json
AnalysiereMitNanonets = http.responseText
End Function
API-Key codieren (Basic Auth)
Function Base64Encode(text As String) As String
Dim xml As Object
Set xml = CreateObject("MSXML2.DOMDocument").createElement("base64")
xml.DataType = "bin.base64"
xml.nodeTypedValue = StrConv(text, vbFromUnicode)
Base64Encode = Replace(xml.Text, vbLf, "")
End Function
Ergebnis extrahieren (vereinfacht)
Function ParseNanonetsJSON(json As String) As String
Dim sc As Object
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
sc.AddCode "function parse(j){ var r=''; var d=JSON.parse(j).result[0].prediction; for(var i=0;i<d.length;i++){ r += d[i].label + '|' + d[i].ocr_text + '\n'; } return r; }"
ParseNanonetsJSON = sc.Run("parse", json)
End Function
Variante 2: Rossum ansprechen
Datei hochladen (Rossum benötigt multipart/form-data)
Rossum hat dafür eine eigene Upload-API.
Hier empfiehlt sich:
- Entweder
curl.exe
per Shell aufrufen - Oder eine kleine Python-Brücke einsetzen
Einfach per VBA schwer umzusetzen wegen Multipart-Form.
Alternativ: PDF auf Server hochladen und URL senden.
JSON abrufen (Vereinfachung)
Function AnalysiereMitRossum(token As String, documentID As String) As String
Dim http As Object
Set http = CreateObject("MSXML2.ServerXMLHTTP")
http.Open "GET", "https://api.rossum.ai/v1/documents/" & documentID & "/", False
http.setRequestHeader "Authorization", "token " & token
http.Send
AnalysiereMitRossum = http.responseText
End Function
Ergebnisse speichern
Sub SpeichereFelder(rechnungID As Long, json As String)
Dim zeilen() As String
Dim teile() As String
Dim i As Long
zeilen = Split(ParseNanonetsJSON(json), vbLf)
For i = 0 To UBound(zeilen)
If Trim(zeilen(i)) <> "" Then
teile = Split(zeilen(i), "|")
If UBound(teile) = 1 Then
CurrentDb.Execute "INSERT INTO tblFelder (RechnungID, Feld, Wert) VALUES (" & _
rechnungID & ", '" & Replace(teile(0), "'", "''") & "', '" & Replace(teile(1), "'", "''") & "')"
End If
End If
Next i
End Sub
Beispielablauf in Access
Sub StarteAuslesung(pfad As String, rechnungID As Long)
Dim base64 As String
Dim json As String
base64 = LeseDateiAlsBase64(pfad)
json = AnalysiereMitNanonets(base64)
SpeichereFelder rechnungID, json
MsgBox "Rechnung verarbeitet."
End Sub
Was Du automatisch auslesen kannst
Feld | Beschreibung |
---|---|
invoice_number | Rechnungsnummer |
invoice_date | Rechnungsdatum |
total_amount | Bruttosumme |
supplier_name | Absender/Firma |
due_date | Zahlungsziel |
Was Du beachten musst
- PDF muss klar lesbar sein (nicht gescanntes Chaos)
- Felder müssen im Modell definiert sein
- API-Limits beachten (z. B. 100/Monat im Free-Tarif)
- Bei Fehlern: Log schreiben, Status prüfen
„Rechnungen einlesen nervt. Access übernimmt das – mit der richtigen API dahinter.“
Wenn Du sowas brauchst – ich baue Dir die Integration.
Ohne Cloud-Chaos, direkt in Deinem Access-Workflow.
No responses yet