2017-03-07 250 views
0

如何删除除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); 

曾有过在V4的变化的.net,使用get_Range停止工作

+0

你有什么你试过了吗?你打算使用特定的图书馆还是办公自动化? – dlatikay

+0

这取决于您选择访问Excel文件数据的方法。 –

+0

我已编辑我的问题,以显示我想要使用的库 – Ollie2619

回答

1

如果你在Excel中工作,你会继续打第二个r删除并观察下面的行向上移动,替换先前被删除行占据的单元格。

要复制自动化该行为:

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); 
+0

我不得不使用第一种方式,因为第二种方法给我'未处理的异常:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'object'does not Contai na'get_Range''的定义 – Ollie2619

相关问题