C# 执行Excel VBA宏工具类

news2024/11/15 4:52:15

写在前面

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

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

 using Excel = Microsoft.Office.Interop.Excel;

代码实现

   /// <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;
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1244095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端开发神器之 VsCode AI 辅助插件 DevChat

目录 前言DevChat介绍DevChat 独特优势注册账号安装插件设置密钥访问指令AI 解疑 最后 #AI编程助手哪家好&#xff1f;DevChat“真”好用 # 前言 我们都有过写代码时反复看了半天也不知道bug在哪&#xff0c;大大浪费了时间。一些基础的代码可能看一会儿能够解决&#xff0c;但…

【蓝桥杯省赛真题46】Scratch魔术表演 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解

目录 scratch魔术表演 一、题目要求 编程实现 二、案例分析 1、角色分析

图片如何去除水印?试试这三种去水印方法!

从事自媒体行业的小伙伴们&#xff0c;你们是否经常为文章配图而烦恼呢&#xff1f;下载的图片大部分带有各种各样的水印或者多余元素&#xff0c;让人感到困扰。今天&#xff0c;我要分享三个去水印的妙招&#xff0c;这是新媒体人必备的图片处理技能&#xff0c;快来一起学起…

STM32F103C8T6第6天:adc、iic、spi、温湿度dht11在lcd1602显示

1. ADC介绍 ADC是什么&#xff1f; Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 ADC的性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xff0c;比如&#xff1a;8、10、1…

ThinkPHP6.1 多应用模式的一些事儿

TP安装就不说了&#xff0c;直接从安装完成开始了。 安装多应用模式扩展 think-multi-app composer require topthink/think-multi-app删除 app 目录下的 controller 文件夹&#xff08;TP 是根据是否有这个文件夹来判断单应用模式还是多应用模式的&#xff09;。 创建应用 …

C++设计模式之工厂模式(中)——工厂模式

工厂模式 工厂模式介绍示例示例使用运行结果工厂模式与简单工厂模式区别 工厂模式 工厂模式在简单工厂模式的基础之上进行了改进。当需要生产的产品种类增加&#xff0c;可以通过新增子类工厂来生产&#xff0c;没有破坏程序设计原则中的开放封闭原则。 介绍 工厂模式先抽象…

在国外怎么申请香港优才计划项目?和在内地申请有何区别?

在国外怎么申请香港优才计划项目&#xff1f;和在内地申请有何区别&#xff1f; 随着香港优才计划的热度持续上升&#xff0c;也吸引了不少优秀人才想要申请。如果你现在人在新加坡、加拿大、马来西亚、澳大利亚或者其他国家&#xff0c;想申请香港优才计划拿香港身份&#xff…

浅析智慧社区建设趋势及AI大数据监管平台方案设计

一、背景与需求 伴随着社会与经济的发展&#xff0c;人们对生活质量的要求越来越高&#xff0c;与此同时&#xff0c;新兴技术的进步也促进了智慧社区市场的逐步成熟。智慧社区是社区管理的一种新理念&#xff0c;是新形势下城市与社会管理的一种创新模式。 在上海、杭州、深…

pycharm 创建的django目录和命令行创建的django再使用pycharm打开的目录对比截图 及相关

pytcharm创建django的项目 命令行创建的django 命令行创建项目时 不带路径时 (.venv) D:\gbCode>django-admin startproject gbCode 命令行创建项目时 带路径时 -- 所以如果有目录就指定路径好 (.venv) D:\gbCode>django-admin startproject gbCode d:\gbCode\

【精选】​​深度学习:构建卷积神经网络的表情识别系统(源码&教程)

1.研究背景与意义 随着社交媒体和在线通信的普及&#xff0c;人们越来越多地使用表情符号来表达情感和情绪。表情识别系统的发展成为一个重要的研究领域&#xff0c;旨在通过计算机自动识别和理解人类的表情&#xff0c;从而提高人机交互的效果和用户体验。 传统的表情识别方…

“它经济”新风口:海外网红营销之路,打造宠物用品全球热潮

近年来&#xff0c;宠物用品行业在全球范围内迎来了蓬勃发展&#xff0c;消费者对宠物的关注和关爱程度不断提升。随着社交媒体的崛起&#xff0c;海外网红营销正成为宠物用品品牌走向国际市场的有效途径&#xff0c;通过与海外网红的合作&#xff0c;不仅可以提升品牌知名度&a…

vivado产生报告阅读分析18-设计收敛报告

设计收敛报告 Report QoR Assessment report_qor_assessment 命令会生成报告以提供下列信息 &#xff1a; • 评估得分 &#xff0c; 用于指示设计满足性能目标的概率 • 有关建议的后续步骤的流程指南 • 使用率和性能指标汇总信息 • 对于 QoR 至关重要的方法论检查汇…

激光雷达与惯导标定 | Lidar_IMU_Init : 编译

激光雷达与惯导标定&#xff1a;Lidar_IMU_Init 编译 功能包安装安装ceres-solver-2.0.0 &#xff08;注意安装2.2.0不行&#xff0c;必须要安装2.0.0&#xff09; LI-Init是一种鲁棒、实时的激光雷达惯性系统初始化方法。该方法可校准激光雷达与IMU之间的时间偏移量和外部参数…

Python中的解析器argparse

import argparse## 构造解析器 argparse.ArgumentParser() parse argparse.ArgumentParser(description"caculateing the area of rectangle")## 添加参数 .add_argument() parse.add_argument("--length",typeint,default20,helpThe length of rectangle…

催单开发信怎么写?外贸人如何写催单邮件?

年末催单开发信编写技巧&#xff1f;最有效的催单话术有哪些&#xff1f; 催单开发信成为了企业间日常沟通的重要一环。这些信件不仅有助于促进业务发展&#xff0c;还可加强供应链的协调&#xff0c;确保货物及时送达。蜂邮EDM将介绍如何写一封出色的催单开发信&#xff0c;以…

jetson xavier NX深度学习环境配置

文章目录 jetson xavier NX深度学习环境配置1. SD卡系统烧录1.1 材料1.2 软件配置1.3 格式化SD卡1.4 系统镜像烧录 2. 环境配置2.1 cuda环境配置2.2 安装依赖库2.3 安装python及依赖环境2.4 安装pytorch环境 jetson xavier NX深度学习环境配置 1. SD卡系统烧录 1.1 材料 SD …

全网最全最有用的网络安全(超详细)学习路线!整理了一个月!

正文&#xff1a; 禁止废话&#xff0c;先看学习路线图&#xff1b; 在这个圈子技术门类中&#xff0c;工作岗位主要有以下三个方向&#xff1a; 安全研发安全研究&#xff1a;二进制方向安全研究&#xff1a;网络渗透方向 下面逐一说明一下。 第一个方向&#xff1a;安全研发…

线程面试题

让3个线程串行执行 1、线程循序执行Join&#xff0c;比如T2.join 表达当前线程需要等待t2执行完&#xff0c;才会执行。2、使用countDownlach &#xff0c;定义2个countDow...&#xff0c;并且值都设置为1&#xff0c; 线程1执行完&#xff0c;调用一次countDow减1&#xff…

Springmvc实现增删改差

一、包结构 二、各层代码 (1)数据User public class User {private Integer id;private String userName;private String note;public User() {super();}public User(Integer i, String userName, String note) {super();this.id i;this.userName userName;this.note note;…