C# 执行Excel VBA宏工具类

写在前面

在Excel文档的自动化处理流程中,有部分值需要通过已定义的宏来求解,所以延伸出了用C# 调用Excel中的宏代码的需求。

首先要从NuGet中引入Microsoft.Office.Interop.Excel 类库

using Excel = Microsoft.Office.Interop.Excel;

代码实现

cs 复制代码
   /// <summary>
    /// 执行Excel VBA宏帮助类
    /// </summary>
    public class ExcelMacroHelper
    {
        /// <summary>
        /// 执行Excel中的宏
        /// </summary>
        /// <param name="excelFilePath">Excel文件路径</param>
        /// <param name="macroName">宏名称</param>
        /// <param name="parameters">宏参数组</param>
        /// <param name="rtnValue">宏返回值</param>
        public void RunExcelMacro(Excel.Application app, string macroName, object[] parameters, out object rtnValue)
        {
            // 根据参数组是否为空,准备参数组对象
            object[] paraObjects;
            if (parameters == null)
                paraObjects = new object[] { macroName };
            else
            {
                int paraLength = parameters.Length;
                paraObjects = new object[paraLength + 1];
                paraObjects[0] = macroName;
                for (int i = 0; i < paraLength; i++)
                    paraObjects[i + 1] = parameters[i];
            }
            rtnValue = this.RunMacro(app, paraObjects);
        }

        /// <summary>
        /// 执行宏
        /// </summary>
        /// <param name="oApp">Excel对象</param>
        /// <param name="oRunArgs">参数(第一个参数为指定宏名称,后面为指定宏的参数值)</param>
        /// <returns>宏返回值</returns>
        private object RunMacro(object app, object[] oRunArgs)
        {
            object objRtn;     // 声明一个返回对象

            // 反射方式执行宏
            objRtn = app.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, app, oRunArgs);

            return objRtn;
        }
    }
相关推荐
牛奔6 小时前
Go 如何打印调试深层或嵌套的结构体
开发语言·后端·golang
geovindu7 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
学逆向的7 小时前
汇编——JCC指令
开发语言·汇编·网络安全
mayaairi8 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
kite01218 小时前
Go语言Map深度解析与最佳实践
开发语言·后端·golang
l1564694810 小时前
突围!图文混合知识库难以解析,Kimi-K3 原生视觉架构深耕知识工作,DMXAPI 统一接口,缩短项目开发周期
java·大数据·开发语言
charlie11451419110 小时前
现代C++工程实践 WeakPtr 实战(三):WeakPtrFactory 与「最后成员」惯用法
开发语言·c++·开源项目·现代c++
吴可可12311 小时前
C#用OpenCVSharp提取轮廓生成CAD多段线
c#
IT小盘12 小时前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
不如语冰12 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python