范围:
我使用excel生成自动报告,但由于我们对服务器有限制,因此我们无法安装Excel.Interop
或使用任何COM
对象执行此类操作。
我们一直在使用EPPLUS作为此任务的主要帮助者,但在涉及PivotCharts
和Macros
等更复杂的事情时,它有一些严重的限制。
我们刚刚完成项目,只缺少PivotCharts
因为EPPLUS不支持它们。
问题:
我们怎么做:
A)将宏写入.xlsm
文件? (我们可以编写一个名为“Auto_Open”的程序,以便excel可以在打开时运行它,创建图表和东西)
或
B)在我们的代码中运行一个宏,在将所有需要的数据放在那里后生成这些图表?
目前不能使用Excel.Interop
。我们愿意接受一些建议
SpreadsheetGear和EasyXLS,但我们找不到任何实际显示如何编写或运行宏的示例或代码。
提前致谢
答案 0 :(得分:15)
我意识到这个问题有点陈旧,但为了帮助未来的访问者,我将补充说当前版本的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 :(得分:1)
您现在将进入VBA IDE。
在自动打开时运行某些内容:
从屏幕左侧的Project Explorer中的VBAProject中选择ThisWorkbook
窗口顶部附近有两个下拉菜单,一个会说(General)
而另一个(Declarations)
点击(General)
并选择工作簿
Excel应自动转到Open
声明。
此子程序中的任何内容都将在打开时执行。
答案 2 :(得分:1)
为什么不创建一个已包含所需宏的模板,而不是尝试以编程方式将宏写入xlsm文件。然后从此模板生成报告。
当用户打开报告(并允许运行宏)时,您的宏将运行并执行您想要的操作(您的选项A)。您的Auto_Open宏可以在执行任何工作之前检查某些合适的条件(例如,在特定位置中存在值,可能在VeryHidden表上,以便用户不能轻易干扰它),以便在您打开时它不会运行一个“空”的模板。
至于您的选项B(在向用户提供报告之前运行宏):如果没有Excel Automation,这是不可行的。