使用xlwings调用本地Ollama时遇Python COM服务器激活失败求助
问题解决指南
一、先解决COM服务器激活错误(hr=-2147221164)
这个错误本质是xlwings的COM组件未正确注册,按以下步骤排查:
- 以管理员身份打开命令提示符,激活你的Python虚拟环境(如果使用了的话),执行命令:
xlwings register - 检查版本兼容性:确保Python为3.8及以上版本,xlwings更新至最新稳定版,Excel为2016及以上版本。
- 调整Excel信任设置:打开「信任中心」→「信任中心设置」→「宏设置」,勾选「启用所有宏」;进入「COM加载项」,确认xlwings加载项已启用,若未启用需手动添加(路径一般为
Lib\site-packages\xlwings\addins\xlwings.xlam)。
二、修正代码中的核心问题
你的代码存在两个致命问题,即使COM问题解决也无法正常运行:
- Excel自定义函数禁止使用
input():input()会触发控制台交互,但Excel函数运行环境无交互界面,直接导致阻塞报错。 - Ollama API调用格式错误:Ollama的API端点为
http://localhost:11434/api/generate,请求参数并非sentence和keywords,需指定模型并构造正确的prompt。
修正后的代码示例:
import xlwings as xw import requests import json @xw.func def ollama_keyword(ref_cell): # 获取单元格中的句子 sentence = xw.Range(ref_cell).value if not sentence: return "请输入有效句子" # 构造调用Ollama的prompt prompt = f"请为以下句子生成2-5个关键词作为摘要:{sentence}" # 调用Ollama本地API try: response = requests.post( "http://localhost:11434/api/generate", json={ "model": "llama2", # 替换为你本地部署的模型名,比如phi3、mistral等 "prompt": prompt, "stream": False # 关闭流式输出,直接获取完整结果 }, timeout=30 ) response.raise_for_status() # 解析Ollama的返回结果 result = json.loads(response.text) return result.get("response", "未生成有效关键词") except requests.exceptions.RequestException as e: return f"API调用失败:{str(e)}"
三、额外注意事项
- 确保Ollama服务已启动:运行
ollama serve命令(若未后台运行),且已拉取对应的模型(比如ollama pull llama2)。 - Excel自定义函数运行时,Python环境必须与注册COM服务器的环境一致,避免虚拟环境混乱。
内容的提问来源于stack exchange,提问作者user23952064
相关产品推荐
相关产品推荐

