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

时间:2014-02-14 16:45:41

标签: c# excel

范围:

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

我们一直在使用EPPLUS作为此任务的主要帮助者,但在涉及PivotChartsMacros等更复杂的事情时,它有一些严重的限制。

我们刚刚完成项目,只缺少PivotCharts因为EPPLUS不支持它们。

问题:

我们怎么做:

A)将宏写入.xlsm文件? (我们可以编写一个名为“Auto_Open”的程序,以便excel可以在打开时运行它,创建图表和东西)

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

目前不能使用Excel.Interop。我们愿意接受一些建议 SpreadsheetGearEasyXLS,但我们找不到任何实际显示如何编写或运行宏的示例或代码。

提前致谢

3 个答案:

答案 0 :(得分:15)

我意识到这个问题有点陈旧,但为了帮助未来的访问者,我将补充说当前版本的EPPlus(写作时为4.0.4)支持包含VBA。

excelDocExcelPackage,您可以使用以下内容删除它:

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 :(得分:1)

  1. 打开Excel
  2. 按Alt + F11
  3. 您现在将进入VBA IDE。

    在自动打开时运行某些内容:

    1. 从屏幕左侧的Project Explorer中的VBAProject中选择ThisWorkbook

    2. 窗口顶部附近有两个下拉菜单,一个会说(General)而另一个(Declarations)点击(General)并选择工作簿

    3. Excel应自动转到Open声明。

      此子程序中的任何内容都将在打开时执行。

答案 2 :(得分:1)

为什么不创建一个已包含所需宏的模板,而不是尝试以编程方式将宏写入xlsm文件。然后从此模板生成报告。

当用户打开报告(并允许运行宏)时,您的宏将运行并执行您想要的操作(您的选项A)。您的Auto_Open宏可以在执行任何工作之前检查某些合适的条件(例如,在特定位置中存在值,可能在VeryHidden表上,以便用户不能轻易干扰它),以便在您打开时它不会运行一个“空”的模板。

至于您的选项B(在向用户提供报告之前运行宏):如果没有Excel Automation,这是不可行的。