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); }
}