如何通过DotNET在Julia中打开Excel并解决进程消失及显示问题
在Julia中通过DotNET操作Excel的问题解决
问题描述
- Excel进程启动后短暂出现在任务管理器随即消失,但操作Word时实例能正常保留
- 尝试设置Excel可见性时触发错误:
CLRException: System.MissingMethodException: Method 'System.RuntimeType.InvokeMember' not found
解决方案
以下是修正后的完整代码,可同时解决两个问题:
using DotNET # 加载所需的.NET类型 Activator = T"System.Activator, System.Runtime" SystemType = T"System.Type, netstandard" BindingFlags = T"System.Reflection.BindingFlags, System.Runtime" # 获取Excel应用程序类型并创建实例 appType = SystemType.GetTypeFromProgID("Excel.Application", true) # 将实例存入全局变量,避免被Julia垃圾回收器回收导致进程退出 global excelApp = Activator.CreateInstance(appType) # 构造可见性参数(需用Any类型数组匹配C#的object[]) parameter = Any[true] # 调用InvokeMember设置可见性,需指定完整的BindingFlags组合 appType.InvokeMember( "Visible", BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, nothing, # Julia中用nothing替代C#的null excelApp, parameter )
关键修正点说明
解决进程消失问题:
Julia的垃圾回收机制会自动清理无引用的对象,若excelApp是局部变量,代码执行完毕后会被回收,导致Excel进程终止。将其声明为全局变量(或保持一个持续的引用)即可让进程持续运行。解决可见性设置报错问题:
- Julia中无
null关键字,需用nothing替代C#中的null - 参数数组必须是
Vector{Any}类型,因为.NET的InvokeMember方法接收object[]类型参数,Bool[]无法完成类型匹配 - 调用
InvokeMember时需明确指定BindingFlags的组合(SetProperty | Public | Instance),否则无法定位到属性的设置方法
- Julia中无
内容的提问来源于stack exchange,提问作者Thomas R
相关产品推荐
相关产品推荐

