如何删除excel中的所有行,除了c#中的标题

时间:2017-03-07 11:44:44

标签: c# excel

如何删除Excel电子表格中除c#?

标题以外的所有行

我正在尝试使用Microsoft.Office.Interop.Excel;

执行此操作

我现在有了这段代码

        Range xlRange = ws.UsedRange;
        int rows = xlRange.Rows.Count;

        Console.WriteLine(rows);

        for (int i = 2; i <= rows; i++)
        {
            ((Range)ws.Rows[i]).Delete(XlDeleteShiftDirection.xlShiftUp);
        }

但它并没有删除所有的行,我认为因为当它遇到某个行不再存在行时会删除行,我做错了什么?

我设法做到了,我从底部而不是顶部开始,所以现在我的循环是

        for (int i = rows; i != 1; i--)
        {
            ((Range)ws.Rows[i]).Delete(XlDeleteShiftDirection.xlShiftUp);
        }

解决方案

var range = (Range)ws.Range[ws.Cells[2, 1], ws.Cells[ws.UsedRange.Rows.Count, ws.UsedRange.Columns.Count]];
range.Delete(XlDeleteShiftDirection.xlShiftUp);

使用get_Range停止工作的.Net的v4发生了变化

1 个答案:

答案 0 :(得分:1)

如果你在Excel中工作,你将继续在第二行上点击删除,并观察下面的行向上移动,替换之前被删除行占用的单元格。

在自动化中复制该行为:

for (int i = 2; i <= rows; i++)
{
    ((Range)ws.Rows[2]).Delete(XlDeleteShiftDirection.xlShiftUp);
}

请注意,您也可以预先构建一个范围,并在没有循环的情况下删除它,这将更快:

var range = (Range)ws.get_Range(
    ws.Cells[1,2],
    ws.Cells[ws.UsedRange.Cols.Count,ws.UsedRange.Rows.Count]
);
range.Delete(XlDeleteShiftDirection.xlShiftUp);
相关问题