【问题标题】:EPPlus edited XLSM files show Error in ExcelEPPlus 编辑的 XLSM 文件在 Excel 中显示错误
【发布时间】:2018-01-05 20:53:03
【问题描述】:

我使用 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);
        }
    }
}

【问题讨论】:

    标签: c# excel epplus


    【解决方案1】:

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

    因此,删除命名范围可以解决问题。但是知道为什么我可以使用 Excel 毫无问题地编辑它,而不是使用 EPPlus 来编辑它仍然很有趣。

    【讨论】:

    • 我也有类似的情况。我的原始 excel 具有指向另一个不存在的 excel 文件的命名值。打开原始的excel没有任何问题,只是顶部有“启用内容”提示;但 EPPlus 的编辑会触发 excel 的错误检查/修复。就我而言,我删除了那个无效的命名值,然后它就可以工作了。
    • 没有足够的代码,因为问题出在 Excel 表本身。只需检查您的命名范围,如果有重叠的范围。
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多