gpt4 book ai didi

c# - Epplus 从特定行中删除所有行

转载 作者:太空狗 更新时间:2023-10-29 22:21:25 29 4
gpt4 key购买 nike

有可能以某种方式从特定(空)行中删除所有后续行吗?我试过 cyclus

            for (int rowNum = 1; rowNum <= worksheet.Dimension.End.Row; rowNum++)
{
var rowCells = from cell in worksheet.Cells
where (cell.Start.Row == rowNum)
select cell;

if (!rowCells.Any(cell => cell.Value != null))
{
worksheet.DeleteRow(rowNum);
}

}

但如果在 Excel 中有数百万个空行,则需要几分钟。

Epplus 提供此方法 worksheet.DeleteRow(int rowFrom, int rows) 但我不知道所有额外空行的数量。

在下面的示例中,我需要删除所有 12+ 行,但问题是我不知道空行开始的具体行。

enter image description here

另一种方法是找到最后一个非空行并删除范围内的所有内容,这样会更快,但是表中的空行还有另一个问题。

ws.DeleteRow(lastFilledTableRow, workSheet.Dimension.End.Row - tableRowsCount,true);

在这个例子中,问题是红色行,但也许我会告诉用户这种 excel 格式是无效的,并规避这个问题。

enter image description here

最佳答案

我知道它很旧但我找不到任何解决方案所以我自己做了一个。它正在检查最后一行是否为空,如果是,则将其删除并执行此操作直到找到非空行。 (这里的非空意味着:这一行中的所有列都有一些值)

worksheet.TrimLastEmptyRows();

public static void TrimLastEmptyRows(this ExcelWorksheet worksheet)
{
while (worksheet.IsLastRowEmpty())
worksheet.DeleteRow(worksheet.Dimension.End.Row);
}

public static bool IsLastRowEmpty(this ExcelWorksheet worksheet)
{
var empties = new List<bool>();

for (int i = 1; i <= worksheet.Dimension.End.Column; i++)
{
var rowEmpty = worksheet.Cells[worksheet.Dimension.End.Row, i].Value == null ? true : false;
empties.Add(rowEmpty);
}

return empties.All(e => e);
}

关于c# - Epplus 从特定行中删除所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44725272/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com