macOS Intel芯片下Spire.Xls 14.2.2实例化Workbook报错求助
解决Spire.Xls在macOS Intel芯片上的初始化加载错误
问题场景
使用Spire.Xls==14.2.2(当前唯一可用版本),设备为macOS Intel芯片,运行以下代码:
from spire.xls import Workbook workbook = Workbook()
触发如下错误:
Traceback (most recent call last): File "/.../test.py", line 10, in <module> workbook = Workbook() File "/.../lib/python3.9/site-packages/plum/function.py", line 642, in __call__ return self.f(self.instance, *args, **kw_args) File "/.../plum/function.py", line 592, in __call__ return _convert(method(*args, **kw_args), return_type) File "/.../spire/xls/Workbook.py", line 18, in __init__ intPtr = CallCFunction(GetDllLibXls().Workbook_CreateWorkbook) File "/.../spire/xls/common/__init__.py", line 109, in CallCFunction raise SpireException(info) spire.xls.common.SpireException: TypeInitialization_Type_NoTypeAvailable: at System.Runtime.CompilerServices.ClassConstructorRunner.EnsureClassConstructorRun(StaticClassConstructionContext*) + 0x148 at System.Runtime.CompilerServices.ClassConstructorRunner.CheckStaticClassConstructionReturnNonGCStaticBase(StaticClassConstructionContext*, IntPtr) + 0x9 at Spire.Xls.Core.Spreadsheet.XlsWorksheet.InitializeCollections() + 0x2c2 at Spire.Xls.Core.Spreadsheet.XlsWorksheet..ctor(Object) + 0x74 at Spire.Xls.Core.Spreadsheet.Collections.XlsWorksheetsCollection.Add(String) + 0x7a at Spire.Xls.Core.Spreadsheet.XlsWorkbook.spra(Int32) + 0x369 at Spire.Xls.Workbook..ctor() + 0x4f at Spire.Xls.AOT.NLWorkbook.CreateWorkbook(IntPtr) + 0x4c
已安装mac版本库,但程序仍尝试通过GetDllLibXls()加载DLL格式文件,需解决该问题。
解决方法
- 检查依赖库完整性:查看Python环境的
site-packages/spire/xls/runtimes/osx-x64目录,确认存在libSpire.Xls.dylib等mac平台依赖文件。若缺失,卸载后重新安装Spire.Xls,保证安装过程无报错。 - 设置环境变量指定库路径:运行代码前,通过环境变量指定mac本地库的加载路径:
替换export DYLD_LIBRARY_PATH=/path/to/your/python/env/lib/python3.9/site-packages/spire/xls/runtimes/osx-x64:$DYLD_LIBRARY_PATH/path/to/your/python/env为你的实际Python环境路径(如虚拟环境目录~/venv或系统Python路径)。 - 修改源码强制加载mac库(临时方案):找到
spire/xls/common/__init__.py中的GetDllLibXls()函数,修改为直接加载mac的.dylib文件:
注意:此修改会改动第三方库源码,后续升级Spire.Xls后需要重新调整。def GetDllLibXls(): import os import ctypes runtime_dir = os.path.join(os.path.dirname(__file__), "../runtimes/osx-x64") dylib_path = os.path.join(runtime_dir, "libSpire.Xls.dylib") return ctypes.CDLL(dylib_path) - 验证.NET运行环境:Spire.Xls底层依赖.NET框架,macOS Intel芯片需安装.NET 6.0及以上版本。运行
dotnet --version检查版本,未安装则下载对应Intel版本的.NET安装包完成配置。
内容的提问来源于stack exchange,提问作者chaooder
相关产品推荐
相关产品推荐

