2016-03-02 47 views
1

我想从Excel中的多个工作表中删除行。目前我的代码只从活动工作表中删除行。我正在查找单元格上的特定值,然后当我找到该值时,我将删除所有存储在该行上的值。从Excel中的多个工作表中删除

代码

private void button2_Click(object sender, EventArgs e) 
    { 

     Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application(); 
     Workbook workBook = Excel.Workbooks.Open(FilePath); 
     Worksheet ws = (Worksheet)Excel.ActiveSheet; 


     for (int j = 1; j <= 10; j++) 
     {     
      for (int i = 1; i <= 20; i++) 
      {       
       if (Convert.ToString(((Microsoft.Office.Interop.Excel.Range)ws.Cells[j, i]).Value2) == "Matter")     
       { 
        for (int r = 1; r <= j; r++) 
        { 
         ((Range)ws.Rows[r]).Delete(XlDeleteShiftDirection.xlShiftUp); 
         MessageBox.Show(Convert.ToString(r)); 
         workBook.SaveAs(@"C:\Users\Separate\New.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, 
             false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, 
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
        } 
       } 

      } 
     }    
     workBook.Close(Type.Missing, Type.Missing, Type.Missing); 
     Excel.Quit(); 
     System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Excel); 
     Excel = null; 

    } 
+0

只需使用'workBook.Worksheets'获取所有工作表,就会返回一个'Worksheet'集合。现在只需遍历它们并在每个循环的开始处将工作表设置为'ws'。 –

回答

1

我会强烈建议尝试使用ClosedXML,因为它使使用Excel工作就轻松多了。特别是与ClosedXML你可以有这样一行:

ws.Row(5).Delete(); 

其中WS是你的初始化工作,它处理繁重的删除该行。 获取或设置单元格的数据一样简单:

ws.Cell(2, 2).Value = "Initial Value"; 

或可替代

ws.Cell("B2").Value = "Value; 

他们也有类型的特定值分配是这样的:

ws.Cell("B2").SetValue<T>(object); 

的文档是很透彻,你可以通过nuget获得这个包(注意它也需要安装DocumentFormat.OpenXML包)

编辑: 我错过了关于多个工作表的部分,所以它就是这样。 XLWorkbook类型具有Worksheet属性,该属性是工作簿中所有工作表的可枚举项。使用它可以获得想要删除行的工作表