在Excel上编写和执行VBAmacros而不使用Excel.Interop

范围:

我使用Excel生成自动报告,但由于我们对服务器有限制,因此无法安装Excel.Interop或使用任何COM对象执行此类操作。

我们一直在使用EPPLUS作为这个任务的主要帮手,但是当涉及更多错综复杂的事物(如PivotChartsMacros时,它有一些严重的限制。

我们刚刚完成了这个项目,因为EPPLUS不支持他们,所以只错过了PivotCharts

题:

我们如何能:

A)将macros写入.xlsm文件? (我们可以写一个名为“Auto_Open”,这样excel就可以运行它,创build图表和东西)

要么

B)在我们的代码中运行一个macros,把所有需要的数据放在那里后生成这些图表?

不使用Excel.Interop是必须在这个时刻。 我们打开了一些build议,如SpreadsheetGear和EasyXLS ,但是我们找不到任何实际显示如何编写或运行macros的代码或代码段。

提前致谢

我意识到这个问题有点老,但为了帮助未来的访问者,我补充一点,当前版本的EPPlus(4.0.4在撰写本文时)支持包含VBA。

如果excelDoc是你的ExcelPackage ,你可以使用下面的方法来删除它:

 excelDoc.Workbook.CreateVBAProject(); StringBuilder vbaCode = new StringBuilder(); vbaCode.AppendLine("Private Sub Workbook_Open()"); vbaCode.AppendLine(" Application.DisplayFormulaBar = False"); vbaCode.AppendLine("End Sub"); excelDoc.Workbook.CodeModule.Code = vbaCode.ToString(); 

希望这可以帮助。

  1. 打开Excel
  2. 按下Alt + F11

您现在将在VBA IDE中。

在Auto Open上运行一些东西:

  1. 从屏幕左侧的Project Explorer中的VBAProject中selectThisWorkbook

  2. 有两个下拉窗口附近的人会说(General)和其他(Declarations)点击(General)并select工作簿

Excel应该会自动将您带入Open声明。

任何写在这个子部分都会公开执行。

为什么不创build一个已经包含你想要的macros的模板,而不是试图以编程的方式将macros写入一个xlsm文件。 然后从这个模板生成你的报告。

当用户打开报告(并允许macros运行),然后你的macros将运行,并做你想要的操纵(您的选项A)。 你的Auto_Openmacros可以在做任何工作之前检查一些合适的条件(例如在一个特定的位置存在一个值,也许在一个VeryHidden表格中,这样用户不会很容易地干扰它),所以当你打开它时它不会运行一个“空”的模板。

至于您的选项B(在向用户提供报告之前运行macros):没有Excel自动化,这是不可行的。