【发布时间】:2017-02-14 21:56:37
【问题描述】:
我必须从 Excel 表格中删除空单元格。我们使用 ClosedXML 创建和编辑文件。
Excel-Before 示例:
XX XX XX XX XX
XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
Excel-After 示例:
XX XX XX XX XX
XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
我的第一个测试是对所有空单元格进行 foreach。但这不起作用,因为只会删除 Row 中的第一个单元格。
private void DeleteCell()
{
List<IXLCell> AllEmptyCells = ws.Cells().Where(w => String.IsNullOrEmpty(w.Value.ToString())).ToList();
foreach(IXLCell cell in AllEmptyCells)
{
cell.Delete(XLShiftDeletedCells.ShiftCellsLeft);
}
}
我的第二个测试正在运行,但需要很长时间才能完成。每次调用都会生成新的列表,直到列表为空。
private void DeleteCell()
{
List<IXLCell> AllEmptyCells = ws.Cells().Where(w => String.IsNullOrEmpty(w.Value.ToString())).ToList();
if(AllEmptyCells.Count > 0)
{
ws.Cell(AllEmptyCells.FirstOrDefault().Address).Delete(XLShiftDeletedCells.ShiftCellsLeft);
DeleteCell();
}
}
对于 100 行,这部分将运行约 2 分钟。有谁知道更好的方法吗?
【问题讨论】: