首页 > 学院 > 开发设计 > 正文

C#调用Excel VBA宏

2019-11-17 03:03:57
字体:
来源:转载
供稿:网友
C#调用Excel VBA宏

近日的一系列工作是做网站的营运维护,因此做了大量的支持工具。有Excel中写VBA的,也有直接C#做的工具。有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进行相应的处理。为了使用方便,我写了一个执行Excel VBA宏的帮助类。放在博客里做个备份也希望对有类似需求的朋友有所帮助。帮助类仅提供了一个方法:RunExcelMacro 参数说明: string excelFilePath Excel文件路径 stringmacroName 宏名称 object[] parameters 宏参数组 out object rtnValue 宏返回值 bool isShowExcel 执行时是否显示Excel

补充说明:VBA宏需如下图写在模块中,才能被此方法识别。写在ThisWorkBook中不能被识别。

执行Excel VBA宏帮助类,注释比较详细,不再累赘代码过程。最核心部分其实就是通过反射方式调用Excel VBA宏,oBook.Save()这句话也很重要,否则即使执行了VBA宏调用,也不会保存Excel更改后的内容

java代码Flashvars" value="clipboard=%201%20using%20System%3B%0A%20%202%20using%20System.Collections.Generic%3B%0A%20%203%20using%20System.Text%3B%0A%20%204%20using%20Excel%20%3D%20Microsoft.Office.Interop.Excel%3B%0A%20%205%20using%20Microsoft.Office.Core%3B%0A%20%206%20using%20System.IO%3B%0A%20%207%20%0A%20%208%20namespace%20DoVBAMacro%0A%20%209%20%7B%0A%2010%20%20%20%20%20%2F%2F%2F%20%3Csummary%3E%0A%2011%20%20%20%20%20%2F%2F%2F%20%E6%89%A7%E8%A1%8CExcel%20VBA%E5%AE%8F%E5%B8%AE%E5%8A%A9%E7%B1%BB%0A%2012%20%20%20%20%20%2F%2F%2F%20%3C%2Fsummary%3E%0A%2013%20%20%20%20%20public%20class%20ExcelMacroHelper%0A%2014%20%20%20%20%20%7B%0A%2015%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%3Csummary%3E%0A%2016%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%E6%89%A7%E8%A1%8CExcel%E4%B8%AD%E7%9A%84%E5%AE%8F%0A%2017%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%3C%2Fsummary%3E%0A%2018%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%3Cparam%20name%3D%22excelFilePath%22%3EExcel%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%3C%2Fparam%3E%0A%2019%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%3Cparam%20name%3D%22macroName%22%3E%E5%AE%8F%E5%90%8D%E7%A7%B0%3C%2Fparam%3E%0A%2020%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%3Cparam%20name%3D%22parameters%22%3E%E5%AE%8F%E5%8F%82%E6%95%B0%E7%BB%84%3C%2Fparam%3E%0A%2021%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%3Cparam%20name%3D%22rtnValue%22%3E%E5%AE%8F%E8%BF%94%E5%9B%9E%E5%80%BC%3C%2Fparam%3E%0A%2022%20%20%20%20%20%20%20%20%20%2F%2F%2F%20%3Cparam%20name%3D%22isShowExcel%22%3E%E6%89%A7%E8%A1%8C%E6%97%B6%E6%98%AF%E5%90%A6%E6%98%BE%E7%A4%BAExcel%3C%2Fparam%3E%0A%2023%20%20%20%20%20%20%20%20%20public%20void%20RunExcelMacro(%0A%2024%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20string%20excelFilePath%2C%0A%2025%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20string%20macroName%2C%0A%2026%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%5B%5D%20parameters%2C%0A%2027%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20out%20object%20rtnValue%2C%0A%2028%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bool%20isShowExcel%0A%2029%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%2030%20%20%20%20%20%20%20%20%20%7B%0A%2031%20%20%20%20%20%20%20%20%20%20%20%20%20try%0A%2032%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2033%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23region%20%E6%A3%80%E6%9F%A5%E5%85%A5%E5%8F%82%0A%2034%20%0A%2035%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%0A%2036%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(!File.Exists(excelFilePath))%0A%2037%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2038%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20System.Exception(excelFilePath%20%2B%20%22%20%E6%96%87%E4%BB%B6%E4%B8%8D%E5%AD%98%E5%9C%A8%22)%3B%0A%2039%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%2040%20%0A%2041%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E8%BE%93%E5%85%A5%E5%AE%8F%E5%90%8D%E7%A7%B0%0A%2042%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(string.IsNullOrEmpty(macroName))%0A%2043%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2044%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20System.Exception(%22%E8%AF%B7%E8%BE%93%E5%85%A5%E5%AE%8F%E7%9A%84%E5%90%8D%E7%A7%B0%22)%3B%0A%2045%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%2046%20%0A%2047%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23endregion%0A%2048%20%0A%2049%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23region%20%E8%B0%83%E7%94%A8%E5%AE%8F%E5%A4%84%E7%90%86%0A%2050%20%0A%2051%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%87%86%E5%A4%87%E6%89%93%E5%BC%80Excel%E6%96%87%E4%BB%B6%E6%97%B6%E7%9A%84%E7%BC%BA%E7%9C%81%E5%8F%82%E6%95%B0%E5%AF%B9%E8%B1%A1%0A%2052%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%20oMissing%20%3D%20System.Reflection.Missing.Value%3B%0A%2053%20%0A%2054%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E6%A0%B9%E6%8D%AE%E5%8F%82%E6%95%B0%E7%BB%84%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A9%BA%EF%BC%8C%E5%87%86%E5%A4%87%E5%8F%82%E6%95%B0%E7%BB%84%E5%AF%B9%E8%B1%A1%0A%2055%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%5B%5D%20paraObjects%3B%0A%2056%20%0A%2057%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(parameters%20%3D%3D%20null)%0A%2058%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2059%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20paraObjects%20%3D%20new%20object%5B%5D%20%7B%20macroName%20%7D%3B%0A%2060%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%2061%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%2062%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2063%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%AE%8F%E5%8F%82%E6%95%B0%E7%BB%84%E9%95%BF%E5%BA%A6%0A%2064%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20int%20paraLength%20%3D%20parameters.Length%3B%0A%2065%20%0A%2066%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20paraObjects%20%3D%20new%20object%5BparaLength%20%2B%201%5D%3B%0A%2067%20%0A%2068%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20paraObjects%5B0%5D%20%3D%20macroName%3B%0A%2069%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20paraLength%3B%20i%2B%2B)%0A%2070%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2071%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20paraObjects%5Bi%20%2B%201%5D%20%3D%20parameters%5Bi%5D%3B%0A%2072%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%2073%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%2074%20%0A%2075%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%88%9B%E5%BB%BAExcel%E5%AF%B9%E8%B1%A1%E7%A4%BA%E4%BE%8B%0A%2076%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Excel.applicationClass%20oExcel%20%3D%20new%20Excel.ApplicationClass()%3B%0A%2077%20%0A%2078%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%88%A4%E6%96%AD%E6%98%AF%E5%90%A6%E8%A6%81%E6%B1%82%E6%89%A7%E8%A1%8C%E6%97%B6Excel%E5%8F%AF%E8%A7%81%0A%2079%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(isShowExcel)%0A%2080%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2081%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E4%BD%BF%E5%88%9B%E5%BB%BA%E7%9A%84%E5%AF%B9%E8%B1%A1%E5%8F%AF%E8%A7%
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表