Andrzej Martyna
Решение 3 почти нормально (для EPPlus 4.5.3.3).
После открытия Visual Basic вы можете увидеть, что Module1 помещается не внутри "модулей", а внутри "объектов Microsoft Excel" вместе с листами. Из-за этого макросы не рассматриваются как исполняемые из Excel (например, после нажатия клавиш Alt+F8).
Здесь вы можете увидеть модификацию, которая помещает Модуль1 туда, где он должен быть:
var xlPack = new ExcelPackage(excelFile);
xlPack.Workbook.CreateVBAProject();
var module = xlPack.Workbook.VbaProject.Modules.AddModule("Module1");
module.Code = "Sub countMacro()\r\n ... Place Code Here ... \r\nEnd Sub\r\n";
КСТАТИ. Я рекомендую поместить макрокод в ресурсы .NET и загрузить его:
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetExecutingAssembly());
using (var reader = embeddedProvider.GetFileInfo("Resources/ExcelMacros.vb").CreateReadStream())
using (var textReader = new StreamReader(reader))
{
xlPack.Workbook.CreateVBAProject();
var module = xlPack.Workbook.VbaProject.Modules.AddModule("Module1");
module.Code = textReader.ReadToEnd();
}