1. using System;
  2. using Excel = Microsoft.Office.Interop.Excel;
  3.  
  4. namespace WindowsFormsApplication1
  5. {
  6. /// <summary>
  7. /// 执行Excel VBA宏帮助类
  8. /// </summary>
  9. public class ExcelMacroHelper
  10. {
  11. /// <summary>
  12. /// 执行Excel中的宏
  13. /// </summary>
  14. /// <param name="excelFilePath">Excel文件路径</param>
  15. /// <param name="macroName">宏名称</param>
  16. /// <param name="parameters">宏参数组</param>
  17. /// <param name="rtnValue">宏返回值</param>
  18. public void RunExcelMacro(Excel.Application app, string macroName, object[] parameters, out object rtnValue)
  19. {
  20. // 根据参数组是否为空,准备参数组对象
  21. object[] paraObjects;
  22. if (parameters == null)
  23. paraObjects = new object[] { macroName };
  24. else
  25. {
  26. int paraLength = parameters.Length;
  27. paraObjects = new object[paraLength + ];
  28. paraObjects[] = macroName;
  29. for (int i = ; i < paraLength; i++)
  30. paraObjects[i + ] = parameters[i];
  31. }
  32. rtnValue = this.RunMacro(app, paraObjects);
  33. }
  34.  
  35. /// <summary>
  36. /// 执行宏
  37. /// </summary>
  38. /// <param name="oApp">Excel对象</param>
  39. /// <param name="oRunArgs">参数(第一个参数为指定宏名称,后面为指定宏的参数值)</param>
  40. /// <returns>宏返回值</returns>
  41. private object RunMacro(object app, object[] oRunArgs)
  42. {
  43. object objRtn; // 声明一个返回对象
  44.  
  45. // 反射方式执行宏
  46. objRtn = app.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, app, oRunArgs);
  47.  
  48. return objRtn;
  49. }
  50. }
  51. }

使用方法

  1. app = new Microsoft.Office.Interop.Excel.Application();
  2. app.Visible = true;
  3.  
  4. string filePath = @"F:\test.xlsm";
  5. Workbook wb = app.Workbooks.Open(filePath);
  6.  
  7. object objRtn = new object();
  8.  
  9. // 执行指定Excel中的宏,执行时显示Excel
  10. ExcelMacroHelper excelMacroHelper = new ExcelMacroHelper();
  11. excelMacroHelper.RunExcelMacro(app,"hong",new Object[] { "现在时刻" },out objRtn);
  12.  
  13. MessageBox.Show(objRtn.ToString());

在Excel中新增“模块”

  1. Function hong(title As String)
  2. Dim ws As Worksheet
  3. Set ws = ThisWorkbook.Worksheets("Sheet1")
  4. ws.Cells(, ).Value = title & ",123"
  5. hong = title & ",123"
  6. End Function

C#调用Excel宏的更多相关文章

  1. 调用Excel宏批量处理文件

    '1.用户可以任意选择文件夹进行遍历 '2.限定遍历时仅搜索EXCEL文件(你可以改变文件类型) '这个程序要先在“引用”下选择"microsoft scripting runtime&qu ...

  2. C# 调用 Excel 宏的方法

    调用方式是使用 Microsoft.Office.Interop.Excel.dll 组件来调用,该组件可以通过 Excel.exe 来生成,具体步骤如下: 第一步,进入 visual Studio ...

  3. C#调用Excel VBA宏

    近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...

  4. C#调用Excel VBA宏[转载]

    原文地址:https://www.cnblogs.com/heekui/archive/2008/03/30/1129355.html 近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有E ...

  5. 功能区按钮调用Excel、PowerPoint、Word中的VBA宏:RunMacro

    功能区按钮调用Excel.PowerPoint.Word中的VBA宏:RunMacro 众所周知,Excel.PPT.Word文档或加载宏文件中可以写很多过程和函数,调试的过程中当然可以按F8或F5直 ...

  6. 使用vbs调用excel中的宏

    使用vbs打开excel文件,并且传递参数调用excel中的macro,自动化完成excel文件的制作. Set oExcel = createobject("Excel.Applicati ...

  7. Ruby调用Excel相关的函数

    require 'win32ole'myexcel = WIN32OLE.new("excel.application")#WIN32OLE.open 方法打开用例文件,用Call ...

  8. c#调用Excel绘制图表

    c#调用Excel需要引用命名空间 using Microsoft.Office.Interop.Excel; 由于该程序不复杂,主要是根据不同数据画表和图,画的图像也并不复杂,因为画图和画表的操作会 ...

  9. C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)

    C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT) private Microsoft.Office.Intero ...

随机推荐

  1. String,StringBuilder和StringBuffer的特点和使用场景

    这三个类是平时开发中经常遇到的,主要差别是运行速度和线程安全,使用起来String最方便了,另外两个稍微复杂一些. 从运行速度角度看,StringBuilder>StringBuffer> ...

  2. 表单提交时编码类型enctype详解

    很早以前,当还没有前端这个概念的时候,我在写表单提交完全不去理会表单数据的编码,在action属性里写好目标URL,剩下的啊交给浏览器吧~但是现在,更多时候我们都采用Ajax方式提交数据,这种原始的方 ...

  3. winform 窗体换皮肤,IrisSkin2.dll的用法

    1. 先把IrisSkin2.dll文件添加到当前项目引用(解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin2.dll文件.....之后就不用我 ...

  4. matlab reshape()、full()

    一.reshape() 对于这个函数,就是重构矩阵. (1)要求:重构前后的矩阵元素个数一致.如3*4矩阵可以重构成2*6,2*3*2等. (2)重构方法:先按列将矩阵转换为向量,然后在向量的基础之上 ...

  5. HDU 1234:开门人和关门人

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. CTF中图片隐藏文件分离方法

    CTF中图片隐藏文件分离方法   0x01 分析 这里我们以图片为载体,给了这样的一样图片:2.jpg 首先我们需要对图片进行分析,这里我们需要用到kali里面的一个工具 binwalk ,想要了解这 ...

  7. 《DSP using MATLAB》Problem 3.6

    逆DTFT定义如下: 需要求积分,

  8. list.stream().parallel() 并行流

    https://blog.csdn.net/u011001723/article/details/52794455/  :  parallel()其实就是一个并行执行的流.它通过默认的ForkJoin ...

  9. streamsets 集成 cratedb 测试

    我们可以集成crate 到streamsets 中可以实现强大的数据导入,数据分析能力. 演示的是进行csv 文件的解析并输出到cratedb 环境使用docker && docker ...

  10. ORA-01791: not a SELECTed expression

    Student表有3个字段:id,name,age 看这两个SQL语句 (1)select name from student order by id; (2)select distinct(name ...