有可能以某种方式删除特定(空)行中的所有后续行?我试过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);
}
}
Run Code Online (Sandbox Code Playgroud)
但如果excel中有数百万个空行,则需要几分钟.
Epplus提供此方法, worksheet.DeleteRow(int rowFrom, int rows)但我不知道所有其他空行的计数.
在下面的示例中,我需要删除所有12+行,但问题是我不知道特定行,空行开始的位置.
替代aproach可以找到最后一个非空行并删除范围的所有内容,这将更快,但是在表内有空行的另一个问题.
ws.DeleteRow(lastFilledTableRow, workSheet.Dimension.End.Row - tableRowsCount,true);
Run Code Online (Sandbox Code Playgroud)
在这个例子中,问题是红色行,但也许我会告诉用户这种excel格式无效并避免问题.
Tom*_*zyk 11
我知道它已经老了,但我找不到任何解决方案,所以我自己做了一个.它检查最后一行是否为空,如果是,则删除它并执行此操作直到找到非空行.(非空意味着:此行中的所有列都有一些值)
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);
}
Run Code Online (Sandbox Code Playgroud)
上面的解决方案是删除文件中的最后一个空行。如果文件在某处的行列表中间有空行,这将不起作用。
下面是识别行列表中间空行的解决方案。
我使用上面和我的组合来删除行列表末尾的空行和行列表中间的空行
private void TrimEmptyRows(ExcelWorksheet worksheet)
{
//loop all rows in a file
for (int i = worksheet.Dimension.Start.Row; i <=
worksheet.Dimension.End.Row; i++)
{
bool isRowEmpty = true;
//loop all columns in a row
for (int j = worksheet.Dimension.Start.Column; j <= worksheet.Dimension.End.Column; j++)
{
if (worksheet.Cells[i, j].Value != null)
{
isRowEmpty = false;
break;
}
}
if (isRowEmpty)
{
worksheet.DeleteRow(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2961 次 |
| 最近记录: |