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

C#调用IronPython脚本提示“No module named openpyxl”问题求助

解决IronPython调用时找不到openpyxl模块的问题

问题根源

你遇到的No module named 'openpyxl'错误,核心原因是IronPython与标准CPython是两个独立的Python运行环境:

  • 通过pip install openpyxl安装的模块,存放在CPython的site-packages目录下;
  • C#中Python.CreateEngine()创建的IronPython引擎,默认只会搜索自身的模块路径,无法找到CPython环境下安装的模块。

解决方案

方案1:用IronPython自带的pip安装openpyxl

IronPython自带适配自身的pip工具,用它安装依赖即可让引擎直接找到模块:

  1. 找到IronPython的安装目录(通常为C:\Program Files\IronPythonXX,XX代表版本号);
  2. 打开命令行进入该目录,执行:
ipy.exe -m pip install openpyxl

方案2:手动添加CPython模块路径到IronPython

若不想重新安装模块,可在C#代码中把CPython的site-packages路径添加到IronPython的搜索路径:

private void Save_Click(object sender, EventArgs e)
{
    StreamWriter fs = new StreamWriter("TxtData.txt", false);

    for (int i = 0; i < data.Length; i++)
    {
        if (i == 2)
        {
            fs.WriteLine(today);
        }
        else
        {
            fs.WriteLine(data[i]);
        }
    }

    fs.Close();

    Console.WriteLine("Saved");

    var engine = Python.CreateEngine();
    // 获取sys.path并添加CPython的site-packages路径
    var sys = engine.GetSysModule();
    var paths = sys.GetVariable("path") as IList<string>;
    // 替换为你本地CPython的site-packages实际路径
    paths.Add(@"C:\Users\你的用户名\AppData\Local\Programs\Python\PythonXX\Lib\site-packages");
    
    var scope = engine.CreateScope();
    engine.ExecuteFile("MainData.py", scope);
    dynamic load_mas = scope.GetVariable("load_mas");
    dynamic saved = load_mas();
}

注:openpyxl是纯Python实现的模块,IronPython可兼容;若模块包含C扩展,此方法可能无效。

额外提示

你的Python代码定义了save_table()函数,但当前C#代码仅调用了load_mas(),若需执行Excel保存逻辑,需在C#中补充调用:

dynamic save_table = scope.GetVariable("save_table");
save_table();

内容的提问来源于stack exchange,提问作者Argentrix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:05:15