EPPlus编辑的XLSM文件在Excel中显示错误

时间:2018-01-05 10:12:42

标签: c# excel epplus

我使用EPPlus库批量编辑一些现有的XLSM文件。在文件中我替换了一行VBA代码,就是这样。如果我手动编辑Excel代码编辑器中的同一行,那么一切都很好。

当我使用Excel 2013(15.0.4989.1000)打开某些文件时,会显示以下错误消息。

  

我们发现'test.xlsm'中的某些内容存在问题。你想要我们吗?   尽可能多地恢复?如果您信任此工作簿的来源,   单击是。

如果单击“是”,则修复报告将显示以下条目。但是这个消息有点过于通用,无法帮助我。

  

删除记录:来自/xl/workbook.xml-Part(Arbeitsmappe)的命名范围

这是我的C#代码,它编辑XLSM文件。我可以更新我的代码,还是在编辑之前必须更新XLSM文件?

static void PatchVba(string filePath, string oldCode, string newCode)
{
    var wbFileInfo = new FileInfo(filePath);
    using (var package = new ExcelPackage(wbFileInfo, false))
    {
        foreach (var m in package.Workbook.VbaProject.Modules)
        {
            if (m.Code.Contains(oldCode))
            {
                m.Code = m.Code.Replace(oldCode, newCode);
                Console.WriteLine("VBA Patched in \"{0}\"", filePath);
            }
        }

        try
        {
            package.SaveAs(wbFileInfo);
        }
        catch
        {
            Console.WriteLine("Could not save patched file \"{0}\".", filePath);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我发现了问题所在。在已编辑的XLSM文件中,范围名称多次使用并具有重叠范围。我太专注于我的C#代码以找到根本原因。

因此删除命名范围可以解决问题。但是,知道为什么我可以在没有使用Excel的问题的情况下编辑它,但是不能使用EPPlus,这仍然很有趣。