如何从命令行启动Excelmacros(没有Worksheet_Open事件)?

有没有可能从命令行启动Excelmacros?

我不想使用Worksheet_Open事件,只需打开Excel文件。

我需要启动Excel工作簿中存在的特定的macros。

使用Windows PowerShell,它具有出色的COM互操作性支持。

我有一个名为“Test”的工作簿c:\ TestBeep.xlsm。 这是我的成绩单:

 PS C:\> $app = New-Object -comobject Excel.Application PS C:\> $wb = $app.Workbooks.Open("c:\TestBeep.xlsm") PS C:\> $wb.Name TestBeep.xlsm PS C:\> $app.Run("Test") PS C:\> $app.Quit() 

或者,您可以添加$app.Visible = $True以使窗口可见。

最后,我使用了一个VB脚本,并从命令行启动它。 这是我的解决scheme:

 Option Explicit LaunchMacro Sub LaunchMacro() Dim xl Dim xlBook Dim sCurPath sCurPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".") Set xl = CreateObject("Excel.application") Set xlBook = xl.Workbooks.Open(sCurPath & "\MyWorkBook.xlsm", 0, True) xl.Application.Visible = True xl.Application.run "MyWorkBook.xlsm!MyModule.MyMacro" xl.DisplayAlerts = False xlBook.saved = True xl.activewindow.close xl.Quit Set xlBook = Nothing Set xl = Nothing End Sub 

AutoIt还提供了很好的COM支持,并具有许多内置的Excel控制function。 您可以将脚本编译为.EXE,然后从命令行运行它。

如果您希望在C#中使用此模板进行编码

 void Main() { var oExcelApp = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); try{ //oExcelApp.Visible = true; var WB = oExcelApp.ActiveWorkbook; var WS = (Worksheet)WB.ActiveSheet; ((string)((Range)WS.Cells[1,1]).Value).Dump("Cell Value"); oExcelApp.Run("test").Dump("macro"); } finally{ if(oExcelApp != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcelApp); oExcelApp = null; } } 

谢谢! Mehdi你的答案也适用于我的一个小调整。 行xl.Application.Visible = True是留下一个僵尸/幻影EXCEL.EXE进程使用了​​内存(通过Windows任务pipe理器find它)。 使用xl.Application.Visible = False反而似乎消除了僵尸。