Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EPPlus,删除此行中的行和图像_C#_Excel_Epplus - Fatal编程技术网

C# EPPlus,删除此行中的行和图像

C# EPPlus,删除此行中的行和图像,c#,excel,epplus,C#,Excel,Epplus,这不会删除此行中的图像。图像是一个小图标,位于单元格内。如果在Excel中手动删除该行,则该行将随该行一起消失 我想先手动删除行的所有图像,然后删除行本身,但是 using (var pck = new ExcelPackage(new FileInfo(wb_path))) { ExcelWorksheet ws = pck.Workbook.Worksheets[ws_name]; ws.DeleteRow(3,1,true); pck.Save(); } …这将继

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

我想先手动删除行的所有图像,然后删除行本身,但是

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

…这将继续删除一个图像,然后进入系统。ArgumentOutOfRangeException

我认为这是EpPlus的问题。如果您可以删除一个,但无法删除另一个,则可能存在一些索引问题

您可以尝试反转列表并按相反顺序删除

 ws.Drawings.Where(r => r.From.Row == 3 && r.To.Row == 3).ToList().ForEach(r => ws.Drawings.Remove(r)); 
如果您想进一步调查,可以查看GitHub的源代码

这是EPPlus中的ExcelDrawings类


原来是一个ePlus bug。我最终得到了一个VBA宏,它根据提供的索引删除行。此外,Application.ScreenUpdate似乎必须设置为True才能正确删除图像。

此链接解决了您的问题:很难,问题是图像没有被删除,而不是行没有被删除
ws.Drawings
    .Where(r => r.From.Row == 3 && r.To.Row == 3)
    .Reverse()
    .ToList()
    .ForEach(r => ws.Drawings.Remove(r));