Veamos como crear una macro en LibreOffice Calc que utilice Python (a través de PyUNO) para enviar un prompt a un modelo LLM local en Ollama.
ollama serve para iniciar el servidor local.ollama pull <modelo>.requests:
requests en Python (para hacer solicitudes HTTP):pip install requestsimport requests
import json
def ollama_generate(model, prompt):
url = "http://localhost:11434/api/generate"
data = {
"model": model,
"prompt": prompt,
"stream": False
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
result = response.json().get("response", "No se encontró respuesta")
return result
else:
return f"Error en Ollama: {response.status_code}"
def macro_ollama(model, prompt):
result = ollama_generate(model, prompt)
current_cell = ThisComponent.CurrentController.ActiveCell
current_cell.setValue(result)No hay una forma incorporada de editar scripts de Python, por lo que debe usar su propio editor de texto. Hay 3 lugares donde puedes poner tu código.
GNU/Linux
/home/USER/.config/libreoffice/4/user/Scripts/pythonWindows
%APPDATA%\LibreOffice\4\user\Scripts\python
macOS
~/Library/Application Support/LibreOffice/4/user/Scripts/python/GNU/Linux
/usr/lib/libreoffice/share/Scripts/python/=macro_ollama("llama3", "¿Qué es la inteligencia artificial?")"llama3" con el nombre del modelo de Ollama y el prompt según tus necesidades.ollama serve) y el modelo debe estar disponible.If you see mistakes or want to suggest changes, please create an issue on the source repository.
For attribution, please cite this work as
Sosa (2025, May 29). Blog de José R Sosa: Macro de LLMs locales en LibreOffice. Retrieved from https://josersosa.github.io/personalweb/posts/2026-02-01-macro-de-llms-locales-en-libreoffice/
BibTeX citation
@misc{sosa2025macro,
author = {Sosa, José R},
title = {Blog de José R Sosa: Macro de LLMs locales en LibreOffice},
url = {https://josersosa.github.io/personalweb/posts/2026-02-01-macro-de-llms-locales-en-libreoffice/},
year = {2025}
}