2016-03-02 50 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屬性,該屬性是工作簿中所有工作表的可枚舉項。使用它可以獲得想要刪除行的工作表

相關問題