在Excel上编写和执行VBAmacros而不使用Excel.Interop
范围:
我使用Excel生成自动报告,但由于我们对服务器有限制,因此无法安装Excel.Interop
或使用任何COM
对象执行此类操作。
我们一直在使用EPPLUS作为这个任务的主要帮手,但是当涉及更多错综复杂的事物(如PivotCharts
和Macros
时,它有一些严重的限制。
我们刚刚完成了这个项目,因为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();
希望这可以帮助。
- 打开Excel
- 按下Alt + F11
您现在将在VBA IDE中。
在Auto Open上运行一些东西:
-
从屏幕左侧的Project Explorer中的VBAProject中select
ThisWorkbook
-
有两个下拉窗口附近的人会说
(General)
和其他(Declarations)
点击(General)
并select工作簿
Excel应该会自动将您带入Open
声明。
任何写在这个子部分都会公开执行。
为什么不创build一个已经包含你想要的macros的模板,而不是试图以编程的方式将macros写入一个xlsm文件。 然后从这个模板生成你的报告。
当用户打开报告(并允许macros运行),然后你的macros将运行,并做你想要的操纵(您的选项A)。 你的Auto_Openmacros可以在做任何工作之前检查一些合适的条件(例如在一个特定的位置存在一个值,也许在一个VeryHidden表格中,这样用户不会很容易地干扰它),所以当你打开它时它不会运行一个“空”的模板。
至于您的选项B(在向用户提供报告之前运行macros):没有Excel自动化,这是不可行的。