C# 从C运行宏#

C# 从C运行宏#,c#,excel,vba,C#,Excel,Vba,我知道您可以使用Microsoft.Office.Interop.Excel在C#程序中使用VBA命令 我有将近10000行的VBA代码,将其转换成与C兼容的命令是不现实的。它创建一个工作簿,并执行数据操作和格式化,以便根据用户请求打印 是否有办法将宏存储在C#中并创建一个工作簿,然后我可以按原样运行宏?您可以按Excel中的原样运行宏。 看看这个: 如果不希望Excel在执行过程中可见,请将Excel.ApplicationClass的visible属性设置为false。以下是此解决方案的

我知道您可以使用
Microsoft.Office.Interop.Excel
在C#程序中使用VBA命令

我有将近10000行的VBA代码,将其转换成与C兼容的命令是不现实的。它创建一个工作簿,并执行数据操作和格式化,以便根据用户请求打印


是否有办法将宏存储在C#中并创建一个工作簿,然后我可以按原样运行宏?

您可以按Excel中的原样运行宏。 看看这个:


如果不希望Excel在执行过程中可见,请将Excel.ApplicationClass的visible属性设置为false。

以下是此解决方案的示例。我创建了工作簿HelloWorldVBACodeExample.xlsm。然后在本工作簿模块1和VBA代码中:

Sub HelloWorld(word)

  MsgBox "Hello world and " & word

End Sub
然后使用C#代码创建控制台应用程序:


在执行过程中,该C#代码执行VBA代码,并显示在消息框文本“Helo world and My Name”中。在使用此代码段的情况下,必须为to string变量path分配将包含VBA代码的xlsm文件的目录的正确路径。

必须将msoAutomationSecurity启用为low,并以字符串形式执行宏。但是,在使用完电子表格后,您可能需要将安全设置重置为高

以下是一个例子:

    public void ExecuteExcelMacro(string sourceFile)
    {
        ExcelApp.Application ExcelApp = new ExcelApp.Application();
        ExcelApp.DisplayAlerts = false;
        ExcelApp.Visible = false;
        ExcelApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityLow;
        ExcelApp.Workbook ExcelWorkBook = ExcelApp.Workbooks.Open(sourceFile);

        string macro = "Sheet1.SendEmailToUser";

        try
        {
            ExcelApp.Run(macro);
            Console.WriteLine("Macro: " + macro + " exceuted successfully");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unable to Run Macro: " + macro + " Exception: " + ex.Message);
        }

        ExcelWorkBook.Close(false);
        ExcelApp.Quit();
        if (ExcelWorkBook != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelWorkBook); }
        if (ExcelApp != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp); }
    }

我从未使用过,但在Interop中有Application.Run()方法来运行宏。这可能很有用。。。最近这运行一个外部文件。我想避免这种情况,b/c这意味着应用程序必须知道文件在每个用户PC上的位置。您可以拥有一个Excel文件,它是运行宏的标准模型。在运行时,您可以克隆模型并导入或以编程方式为克隆创建数据,然后运行宏。
    public void ExecuteExcelMacro(string sourceFile)
    {
        ExcelApp.Application ExcelApp = new ExcelApp.Application();
        ExcelApp.DisplayAlerts = false;
        ExcelApp.Visible = false;
        ExcelApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityLow;
        ExcelApp.Workbook ExcelWorkBook = ExcelApp.Workbooks.Open(sourceFile);

        string macro = "Sheet1.SendEmailToUser";

        try
        {
            ExcelApp.Run(macro);
            Console.WriteLine("Macro: " + macro + " exceuted successfully");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unable to Run Macro: " + macro + " Exception: " + ex.Message);
        }

        ExcelWorkBook.Close(false);
        ExcelApp.Quit();
        if (ExcelWorkBook != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelWorkBook); }
        if (ExcelApp != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp); }
    }