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. SharePoint 数据库管理-PowerShell

    1. 显示所有SharePoint数据库 Get-SPDatabase –ServerInstance "SP2010\SQLSharePoint" 2. 获取指定的数据库 $da ...

  2. [翻译]HTTP: Let’s GET It On!

    原文地址:HTTP: Let’s GET It On! 简介 几周之前,我们了解到HTTP是一个应用级的协议.现在是时候探索我们应该如何在客户端和服务端的通信之间使用这个协议了. 从网络上获取资源 记 ...

  3. MyEclipse怎么导入导出项目

    MyEclipse怎么导入导出项目 | 浏览:25271 | 更新:2012-06-06 17:48 1 2 3 4 5 6 7 分步阅读 MyEclipse,是一个十分优秀的功能强大的JavaEE的 ...

  4. GTK安装

    上面是linux下GTK+配置所需要的库,关于各个库的功能,查看http://www.gtk.org/overview.php,至于库的下载在http://www.gtk.org/download/l ...

  5. IPM简介

    1.IPM包含3个函数. image2ground:将图像中的像素点(u, v)对应到地平面上(Z=1)IPM的像素点(x, y): ground2image:将IPM中的像素点(x, y)基于IPM ...

  6. 注解JAVA对象(基于Hibernate4.3)

    package com.chauvet.po; import java.util.Date; import javax.persistence.Column; import javax.persist ...

  7. 表单添加缩略图及截图js代码

    此为表单提交是上传截图的代码,待优化: // 添加小程序图片 function addAvatar(obj){ var file = obj.files[0]; limit($('.avatar_bo ...

  8. REST与RPC的简单对比

    一.REST:Representational State Transfer,表述性状态转移 REST是一种架构风格,指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是RESTf ...

  9. Understanding Safari Reader

    Interesting enough to find out the Reader function in Safari is actually Javascript and there are ma ...

  10. 理解git

    为了真正了解git,我们从底部.底层开始,了解git核心,知其然并知其所以然. 为什么要进行版本控制呢? 因为编写文件不可能一次到位,文件总是有不同的状态需要保存下来,方便以后出错回滚. git 是目 ...