Office + KI Integration
VBA-Makros und Python-Bridge für Word & Excel mit LLM-Anbindung (Ollama, ChatGPT, Claude)
Integrationswege im Überblick
1. Cloud-Copilot
Microsoft 365 Copilot oder ChatGPT-Plugin direkt in Word/Excel. Schnell einzurichten, aber Daten gehen extern.
2. VBA-Makro + API
Eigenes Makro, das selektierten Text an eine LLM-API schickt und das Ergebnis einfügt. Maximale Kontrolle, aber VBA-Wartung.
3. Python-Bridge (lokal)
Lokaler HTTP-Dienst (FastAPI) spricht mit Ollama/API. Office ruft ihn über VBA auf. Vollständig offline möglich.
Variante A: VBA-Makro direkt an Claude/OpenAI
Einfachster Ansatz: ein Word-Makro nimmt den markierten Text, schickt ihn an die Claude- oder OpenAI-API und fügt die Antwort ein. Der API-Key wird als Windows-Umgebungsvariable gespeichert.
Word-VBA-Makro (Claude-API)
Sub AskClaude()
Dim selText As String, prompt As String, resp As String
If Selection.Type = wdSelectionNormal Then
selText = Selection.Text
Else
MsgBox "Bitte Text markieren.": Exit Sub
End If
prompt = InputBox("Anweisung:", "Claude", "Formuliere patentgerecht um.")
If prompt = "" Then Exit Sub
resp = CallClaude(prompt & vbCrLf & vbCrLf & selText)
Selection.TypeText resp
End Sub
Private Function CallClaude(userMsg As String) As String
Dim xhr As Object, body As String, apiKey As String
apiKey = Environ("ANTHROPIC_API_KEY")
Set xhr = CreateObject("MSXML2.XMLHTTP")
body = "{""model"":""claude-sonnet-4-6""," & _
"""max_tokens"":2048," & _
"""messages"":[{""role"":""user"",""content"":" & JsonStr(userMsg) & "}]}"
xhr.Open "POST", "https://api.anthropic.com/v1/messages", False
xhr.setRequestHeader "content-type", "application/json"
xhr.setRequestHeader "x-api-key", apiKey
xhr.setRequestHeader "anthropic-version", "2023-06-01"
xhr.send body
' Minimal-Parsing: content[0].text
Dim r As String: r = xhr.responseText
Dim p As Long: p = InStr(r, """text"":""") + 8
Dim q As Long: q = InStr(p, r, """")
CallClaude = Replace(Mid(r, p, q - p), "\n", vbCrLf)
End Function
Private Function JsonStr(s As String) As String
JsonStr = """" & Replace(Replace(s, "\", "\\"), """", "\""") & """"
End Function Setup: Alt+F11 öffnet den VBA-Editor, Modul einfügen, Code einsetzen, API-Key als Umgebungsvariable ANTHROPIC_API_KEY (bzw. OPENAI_API_KEY) setzen, Makro als Symbolleisten-Button oder Tastenkombination verfügbar machen.
Variante B: Python-Bridge mit lokalem Ollama
Für vollständig lokale Verarbeitung: keine Daten verlassen den Rechner. Ein kleiner FastAPI-Dienst läuft im Hintergrund und verteilt die Anfragen von Office an Ollama.
1. Bridge-Server (bridge.py)
from fastapi import FastAPI
from pydantic import BaseModel
import ollama
app = FastAPI()
class Req(BaseModel):
instruction: str
text: str
model: str = "llama3.3:70b-instruct"
@app.post("/complete")
def complete(req: Req):
resp = ollama.chat(
model=req.model,
messages=[
{"role": "system", "content": "Du bist Patentanwalts-Assistent. Antworte prägnant und auf Deutsch."},
{"role": "user", "content": f"{req.instruction}\n\nText:\n{req.text}"},
],
)
return {"reply": resp["message"]["content"]}
Starten mit uvicorn bridge:app --port 8765. Optional beim Windows-Start automatisieren.
2. Word-Makro, das die Bridge nutzt
Sub AskLocal()
Dim selText As String, instruction As String, resp As String
selText = Selection.Text
instruction = InputBox("Anweisung:", "Lokale KI", "Umformulieren.")
If instruction = "" Then Exit Sub
Dim xhr As Object: Set xhr = CreateObject("MSXML2.XMLHTTP")
Dim body As String
body = "{""instruction"":" & JsonStr(instruction) & _
",""text"":" & JsonStr(selText) & "}"
xhr.Open "POST", "http://127.0.0.1:8765/complete", False
xhr.setRequestHeader "content-type", "application/json"
xhr.send body
resp = xhr.responseText
Dim p As Long: p = InStr(resp, """reply"":""") + 9
Dim q As Long: q = InStrRev(resp, """")
Selection.TypeText Replace(Mid(resp, p, q - p), "\n", vbCrLf)
End Sub Excel: Zellen-Funktion =LLM(...)
Mit einer User-Defined Function lässt sich jede Zelle an das LLM schicken, nützlich für Tabellen mit Stichwörtern, Klassifikationen, Übersetzungen.
Public Function LLM(instruction As String, text As String) As String
Dim xhr As Object: Set xhr = CreateObject("MSXML2.XMLHTTP")
Dim body As String
body = "{""instruction"":" & JsonStr(instruction) & _
",""text"":" & JsonStr(text) & "}"
xhr.Open "POST", "http://127.0.0.1:8765/complete", False
xhr.setRequestHeader "content-type", "application/json"
xhr.send body
Dim r As String: r = xhr.responseText
Dim p As Long: p = InStr(r, """reply"":""") + 9
Dim q As Long: q = InStrRev(r, """")
LLM = Replace(Mid(r, p, q - p), "\n", " ")
End Function
In einer Excel-Zelle: =LLM("Klassifiziere als Mechanik/Elektro/Software"; A2)
Typische Anwendungen in der Patentpraxis
Bescheidserwiderung umformulieren
Entwurf markieren → Makro → glatterer Stil, patenttypische Sprache einhalten.
Merkmalsgliederung prüfen
Anspruchstext + Gliederung markieren → „Prüfe Vollständigkeit".
Excel: Aktenliste klassifizieren
=LLM-Funktion in einer Spalte → automatische Einsortierung nach Technikgebiet.
Übersetzung DE ⇄ EN
Kurze Passagen direkt ersetzen lassen; patenttypische Terminologie bleibt erhalten.
MCP-Connectors für Claude Cowork
Claude Cowork (Desktop) kann über das Model Context Protocol (MCP) direkt mit Office-Produkten, E-Mail und Kalender reden, ohne eigenes Makro.
- Microsoft 365 Connector: liest/schreibt OneDrive, SharePoint, Outlook, Teams
- Google Workspace: Drive, Gmail, Calendar
- Gmail / Google Calendar: einzeln verfügbar
- Box, Egnyte: für Kanzleien mit eigenem Dokumentenmanagement
- Slack, Atlassian: für interne Kommunikation / Ticket-Systeme
Details: siehe Claude-Code-Guide → Sektion „Hooks & MCP" bzw. die offizielle Dokumentation unter docs.claude.com.
Datenschutz & Sicherheit
- Mandatsgeheimnis:* Für Akteninhalte die Ollama-Bridge nutzen (nichts verlässt den Rechner) oder eine vertrauenswürdige Cloud-Instanz einsetzen, die den berufsrechtlichen Verschwiegenheitsanforderungen genügt.
- API-Keys: Niemals in Makros hart codieren. Immer Umgebungsvariablen oder Credential Manager.
- Makro-Signatur: VBA-Makros digital signieren, damit Office sie ohne Warnung ausführt und sie nicht durch Updates ungewollt aktiviert werden.
- Audit: Protokollierung der Anfragen lokal speichern, notwendig für spätere Nachvollziehbarkeit.
* Für die Verarbeitung vertraulicher Inhalte gelten u.a. die berufsrechtlichen Verschwiegenheitsanforderungen. Diese können durch ein lokal laufendes Modell oder, im Einzelfall, durch eine vertrauenswürdige oder selbst betriebene Cloud-Instanz erfüllt werden. Dies ist keine Rechtsberatung.