我使用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);
}
}
}
答案 0 :(得分:1)
我发现了问题所在。在已编辑的XLSM文件中,范围名称多次使用并具有重叠范围。我太专注于我的C#代码以找到根本原因。
因此删除命名范围可以解决问题。但是,知道为什么我可以在没有使用Excel的问题的情况下编辑它,但是不能使用EPPlus,这仍然很有趣。