You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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问题解决也无法正常运行:

  1. Excel自定义函数禁止使用input():input()会触发控制台交互,但Excel函数运行环境无交互界面,直接导致阻塞报错。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:16:15