【问题标题】:Writing and Executing VBA Macros on Excel without using Excel.Interop [duplicate]在 Excel 上编写和执行 VBA 宏而不使用 Excel.Interop [重复]
【发布时间】:2014-02-14 16:45:41
【问题描述】:

范围:

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

我们一直使用EPPLUS 作为我们的主要助手来完成这项任务,但是当涉及到更复杂的事情时,它有一些严重的限制,例如PivotChartsMacros

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

问题:

我们该怎么做:

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

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

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

提前致谢

【问题讨论】:

    标签: c# excel


    【解决方案1】:

    我意识到这个问题有点老了,但为了帮助未来的访问者,我会补充一点,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();
    

    希望这会有所帮助。

    【讨论】:

    • 将 vba 代码放入工作簿后如何实际执行?
    • @VanceSmith 在上面的例子中,由于代码在 Workbook_Open 子例程中,它会在打开工作簿时自动执行。
    • 直到宏由于过度热心的安全区域而被阻止,该区域默认所有设置并阻止宏......所以,不会触发任何 workbook_open 事件
    【解决方案2】:
    1. 打开 Excel
    2. 按 Alt+F11

    您现在将在 VBA IDE 中。

    在自动打开上运行一些东西:

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

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

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

    在这个 sub 中写的任何东西都会在打开时执行。

    【讨论】:

    • 感谢您的回复。我需要报告生成器完全自动化,无需人工输出。另外,EPPLUS 不支持打开 xlsm(启用宏)文件,所以我无法手动完成。
    • @MarcelloGrechiLins 那么你可能不得不使用(Open XML SDK)[msdn.microsoft.com/en-us/library/office/bb448854.aspx]
    • OP 询问如何在没有 Excel Interop 的情况下添加宏,所以我认为他们没有手动添加宏的奢侈。
    【解决方案3】:

    与其尝试以编程方式将宏写入 xlsm 文件,不如创建一个已经包含所需宏的模板。然后从此模板生成您的报告。

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

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

    【讨论】:

    • 我的错,我忘了提到 EPPLUS 不打开 xlsm 文件,所以我们无法设置模板并从那里工作。这是我们的第一种方法,但没有奏效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2013-07-09
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多