EPPlus,删除行和该行的图像

EPPlus, delete row and image in this row

using (var pck = new ExcelPackage(new FileInfo(wb_path)))
{
    ExcelWorksheet ws = pck.Workbook.Worksheets[ws_name];
    ws.DeleteRow(3,1,true);
    pck.Save();
}

这不会删除位于该行中的图像。该图像是一个小图标,适合一个单元格。如果在 Excel 中手动删除行,则它会随行一起消失。

我考虑过先手动删除该行的所有图像,然后再删除该行本身,但是...

 ws.Drawings.Where(r => r.From.Row == 3 && r.To.Row == 3).ToList().ForEach(r => ws.Drawings.Remove(r)); 

...这继续删除一张图像,然后落入 System.ArgumentOutOfRangeException

我认为这是 EpPlus 的问题。如果能删除一个,不能删除另一个,可能是索引有问题。

您可以尝试颠倒列表并以相反的顺序删除。

ws.Drawings
    .Where(r => r.From.Row == 3 && r.To.Row == 3)
    .Reverse()
    .ToList()
    .ForEach(r => ws.Drawings.Remove(r));

如果您想进一步调查,可以从 GitHub 查看源代码。

这是 EPPlus 中的 ExcelDrawings class。

https://github.com/JanKallman/EPPlus/blob/master/EPPlus/Drawing/ExcelDrawings.cs

事实证明是 EPPlus 错误。我最终得到了一个 VBA 宏,它根据提供的索引删除行。似乎 Application.ScreenUpdating 必须设置为 True 才能正确删除图像。