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宏相关推荐

  1. jacob调用Excel VBA宏

    1,下载jacob https://github.com/freemansoft/jacob-project 下载最新版即可 2,本地配置 下载完成后,会得到这几个文件 jacob.jar可引入工程供 ...

  2. Excel VBA 宏自动创建表格

    Excel VBA 宏 - 自动创建表格 应朋友的需求,编写了一个 VBA 宏,用于自动创建工作簿,实现了排版布局.冻结表头.条件格式.自动求和.单元格保护等功能. 分别创建了 4 个工作簿 1-12 ...

  3. python调用excel的宏_在 Excel 中使用 Python 开发宏脚本

    文 | varlemon 编辑 | EarlGrey 推荐 | 编程派公众号(ID:codingpy) 之前发文介绍过一个叫GridStudio的神器,可以在网页版应用中将 Python 与表格处理结 ...

  4. python调用excel的宏_Python – 运行Excel宏

    我想使用Python在Data.csv中的工作表上运行MacroBook.xlsm中包含的宏. 通常在excel中,我打开了两个文件并将焦点移到Data.csv文件并从MacroBook运行宏. py ...

  5. python调用excel的宏_Excel Python 调用Excel-ExcelVBA程序开发-ExcelHome技术论坛 -

    不知大家是否知道Python这一非常强大的脚本语言. 现在介绍通过它是如何操作Excel的. 首先,安装好Python后,需要下一个win32com的补丁.用Google搜一下就可以找到了. 具体操作 ...

  6. pywin32\win32com 运行 Word、Excel VBA宏最简单的方法

    简单粗暴:doc.Application.Run('批处理VBA') 高手应该看懂了,看不懂的,看下面代码: from win32com.client import Dispatch# 打开Word软 ...

  7. PYTHON 调用EXCEL VBA 函数:使用win32com模块

    import win32com.clientdef excel_VBA():xls=win32com.client.Dispatch('Excel.Application')xls.Workbooks ...

  8. 详解xlwings包,用Python代替Excel VBA

    详解xlwings包,用Python代替Excel VBA <代替VBA! 用Python轻松实现Excel编程>demo 主要内容 Python语法基础 Excel对象模型:OpenPy ...

  9. c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

    以前,Excel和Python Jupyter Notebook之间我们只能选择一个.但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exce ...

  10. python 调用vba 参数 保存表格_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

    以前,Excel和Python Jupyter Notebook之间我们只能选择一个. 但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exc ...

最新文章

  1. java ftp模糊查询_linux怎么模糊查找一个文件
  2. 【转】Spring事务超时时间可能存在的错误认识
  3. 解决import tensorflow时的报错 Passing (type, 1) or ‘1type‘ as a synonym of type is deprecate
  4. 阿里云MaxCompute,用计算力让数据发声
  5. SQL中,where 与 having 的性能比较
  6. opencv-Getting Started with Videos
  7. 参数编码 完全解决方案 (转)
  8. linux proc目录 是什么意思,linux 下proc目录里面有什么
  9. andriod搭建自己的轮询框架
  10. csu 1196 - 去爬山
  11. 钉钉总裁不穷:周末最烦写周报还有被人钉
  12. 【路径规划】基于matlab蚁群算法求解公交车路径规划问题【含Matlab源码 930期】
  13. redis 集群常用命令
  14. php 降低视频分辨率,将低分辨率视频变成1920*1080高分辨视频,可自由调节分辨率宽高...
  15. /usr/bin/ld: cannot find Scrt1.o: No such file or directory
  16. IIS6配置和PHP5.6环境安装
  17. 幅值与峰峰值的计算_交流电有效值与峰值计算公式的推导过程.
  18. nginx配置不允许访问内容
  19. 全球十大正规外盘期货交易APP平台排名(2022版)
  20. java final成员变量吗_阳光沙滩博客-为什么Java匿名内部内使用局部变量需要加final?而访问成员变量却不用加final呢?...

热门文章

  1. maya表面种植物体插件 Plant Objects on surface v1.0 下载及教程
  2. 《黄花黄》古诗词引用摘录
  3. jQuery 的 slideUp 动画,当鼠标快速连续触发, 动画会滞后反复执行,该如何处理呢
  4. vue、Element-UI 图标偶发性乱码问题解决方案
  5. oracle+ebs+fsg报表,EBS 11i FSG报表用XML publish输出问题!!!!
  6. 用简单的图来解释人工神经网络(三)——BP神经网络
  7. python_while 循环_珠穆朗玛峰
  8. python之pyautogui实现鼠标键盘控制
  9. 解析:Are We Really Making Much Progress?A Worrying Analysis of Recent Neural Recommendation Approaches
  10. N个鸡蛋放进M个篮子问题