C#调用Excel Vba宏
c#程序调用Excel程序,可以让excel显示,也可以让excel不显示,但经过多次测试,如果excel不显示执行vba,则之前必须打开过一次,否则就会报错
这是需要引用的dll
using Microsoft.Office.Interop.Excel
using Microsoft.Office.Core
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Core; using System.IO;
//下面这两个函数闭着眼睛直接抄
string xadd = @"C:\Users\Administrator\Desktop\set.xlsm"; //记录excel地址文件/// <summary>/// 执行Excel中的宏/// </summary>/// <param name="excelFilePath">Excel文件路径</param>/// <param name="macroName">宏名称</param>/// <param name="parameters">宏参数组</param>/// <param name="rtnValue">宏返回值</param>/// <param name="isShowExcel">执行时是否显示Excel</param> public void RunExcelMacro(string excelFilePath, string macroName, object[] parameters, out object rtnValue, bool isShowExcel){try{#region 检查入参// 检查文件是否存在if (!File.Exists(excelFilePath)){throw new System.Exception(excelFilePath + " 文件不存在");}// 检查是否输入宏名称if (string.IsNullOrEmpty(macroName)){throw new System.Exception("请输入宏的名称");}#endregion#region 调用宏处理// 准备打开Excel文件时的缺省参数对象object oMissing = System.Reflection.Missing.Value;// 根据参数组是否为空,准备参数组对象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];}}// 创建Excel对象示例Excel.ApplicationClass oExcel = new Excel.ApplicationClass();// 判断是否要求执行时Excel可见if (isShowExcel){// 使创建的对象可见oExcel.Visible = true;}else{oExcel.Visible = false;}// 创建Workbooks对象Excel.Workbooks oBooks = oExcel.Workbooks;// 创建Workbook对象Excel._Workbook oBook = null;// 打开指定的Excel文件oBook = oBooks.Open(excelFilePath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing );// 执行Excel中的宏rtnValue = this.RunMacro(oExcel, paraObjects);// 保存更改oBook.Save();// 退出WorkbookoBook.Close(false, oMissing, oMissing);#endregion#region 释放对象// 释放Workbook对象System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);oBook = null;// 释放Workbooks对象System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);oBooks = null;// 关闭ExceloExcel.Quit();// 释放Excel对象System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);oExcel = null;// 调用垃圾回收GC.Collect();#endregion}catch (Exception ex){throw ex;}}/// <summary>/// 执行宏/// </summary>/// <param name="oApp">Excel对象</param>/// <param name="oRunArgs">参数(第一个参数为指定宏名称,后面为指定宏的参数值)</param>/// <returns>宏返回值</returns>private object RunMacro(object oApp, object[] oRunArgs){try{// 声明一个返回对象object objRtn;// 反射方式执行宏objRtn = oApp.GetType().InvokeMember("Run",System.Reflection.BindingFlags.Default |System.Reflection.BindingFlags.InvokeMethod,null,oApp,oRunArgs);// 返回值return objRtn;}catch (Exception ex){if (ex.InnerException.Message.ToString().Length > 0){throw ex.InnerException;}else{throw ex;}}}
c#执行
private void button1_Click(object sender, EventArgs e){try{// 返回对象object objRtn = new object();//执行指定Excel中的宏,执行时显示ExcelRunExcelMacro(xadd,"getTime",new Object[] { },out objRtn,true);// 执行指定Excel中的宏,执行时不显示ExcelRunExcelMacro(xadd,"getTime2",new Object[] { "现在时刻" },out objRtn,false );//执行指定Excel中的宏,执行时显示Excel,有返回值RunExcelMacro(xadd,"getTime3",new Object[] { "现在时刻" },out objRtn,false);MessageBox.Show((string)objRtn);}catch (System.Exception ex){MessageBox.Show(ex.Message);}}
vba函数类型
Sub getTime()Sheet1.Cells(1, 1) = NowEnd SubSub getTime2(title As String)Sheet1.Cells(2, 1) = title & " : " & NowEnd SubFunction getTime3(title As String) As StringgetTime3 = title & " : " & NowEnd Function
注:
期间有个无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口
解决方法:选中引用的DLL:Microsoft.Office.Interop.Excel;右键属性,找到"嵌入互操作类型",将true改为false,就可以了
C#调用Excel Vba宏相关推荐
- jacob调用Excel VBA宏
1,下载jacob https://github.com/freemansoft/jacob-project 下载最新版即可 2,本地配置 下载完成后,会得到这几个文件 jacob.jar可引入工程供 ...
- Excel VBA 宏自动创建表格
Excel VBA 宏 - 自动创建表格 应朋友的需求,编写了一个 VBA 宏,用于自动创建工作簿,实现了排版布局.冻结表头.条件格式.自动求和.单元格保护等功能. 分别创建了 4 个工作簿 1-12 ...
- python调用excel的宏_在 Excel 中使用 Python 开发宏脚本
文 | varlemon 编辑 | EarlGrey 推荐 | 编程派公众号(ID:codingpy) 之前发文介绍过一个叫GridStudio的神器,可以在网页版应用中将 Python 与表格处理结 ...
- python调用excel的宏_Python – 运行Excel宏
我想使用Python在Data.csv中的工作表上运行MacroBook.xlsm中包含的宏. 通常在excel中,我打开了两个文件并将焦点移到Data.csv文件并从MacroBook运行宏. py ...
- python调用excel的宏_Excel Python 调用Excel-ExcelVBA程序开发-ExcelHome技术论坛 -
不知大家是否知道Python这一非常强大的脚本语言. 现在介绍通过它是如何操作Excel的. 首先,安装好Python后,需要下一个win32com的补丁.用Google搜一下就可以找到了. 具体操作 ...
- pywin32\win32com 运行 Word、Excel VBA宏最简单的方法
简单粗暴:doc.Application.Run('批处理VBA') 高手应该看懂了,看不懂的,看下面代码: from win32com.client import Dispatch# 打开Word软 ...
- PYTHON 调用EXCEL VBA 函数:使用win32com模块
import win32com.clientdef excel_VBA():xls=win32com.client.Dispatch('Excel.Application')xls.Workbooks ...
- 详解xlwings包,用Python代替Excel VBA
详解xlwings包,用Python代替Excel VBA <代替VBA! 用Python轻松实现Excel编程>demo 主要内容 Python语法基础 Excel对象模型:OpenPy ...
- c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
以前,Excel和Python Jupyter Notebook之间我们只能选择一个.但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exce ...
- python 调用vba 参数 保存表格_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
以前,Excel和Python Jupyter Notebook之间我们只能选择一个. 但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exc ...
最新文章
- java ftp模糊查询_linux怎么模糊查找一个文件
- 【转】Spring事务超时时间可能存在的错误认识
- 解决import tensorflow时的报错 Passing (type, 1) or ‘1type‘ as a synonym of type is deprecate
- 阿里云MaxCompute,用计算力让数据发声
- SQL中,where 与 having 的性能比较
- opencv-Getting Started with Videos
- 参数编码 完全解决方案 (转)
- linux proc目录 是什么意思,linux 下proc目录里面有什么
- andriod搭建自己的轮询框架
- csu 1196 - 去爬山
- 钉钉总裁不穷:周末最烦写周报还有被人钉
- 【路径规划】基于matlab蚁群算法求解公交车路径规划问题【含Matlab源码 930期】
- redis 集群常用命令
- php 降低视频分辨率,将低分辨率视频变成1920*1080高分辨视频,可自由调节分辨率宽高...
- /usr/bin/ld: cannot find Scrt1.o: No such file or directory
- IIS6配置和PHP5.6环境安装
- 幅值与峰峰值的计算_交流电有效值与峰值计算公式的推导过程.
- nginx配置不允许访问内容
- 全球十大正规外盘期货交易APP平台排名(2022版)
- java final成员变量吗_阳光沙滩博客-为什么Java匿名内部内使用局部变量需要加final?而访问成员变量却不用加final呢?...
热门文章
- maya表面种植物体插件 Plant Objects on surface v1.0 下载及教程
- 《黄花黄》古诗词引用摘录
- jQuery 的 slideUp 动画,当鼠标快速连续触发, 动画会滞后反复执行,该如何处理呢
- vue、Element-UI 图标偶发性乱码问题解决方案
- oracle+ebs+fsg报表,EBS 11i FSG报表用XML publish输出问题!!!!
- 用简单的图来解释人工神经网络(三)——BP神经网络
- python_while 循环_珠穆朗玛峰
- python之pyautogui实现鼠标键盘控制
- 解析:Are We Really Making Much Progress?A Worrying Analysis of Recent Neural Recommendation Approaches
- N个鸡蛋放进M个篮子问题