2017-11-20 14 views
0

Excelの自動化プログラムを構築していますが、条件付きで特定の行を削除する必要があります。私は224行の特定のパブリッシャーを持っています。 224行の中で160行は無効で、160行は削除する必要があります。しかし、行を繰り返して条件付きで削除すると、160行だけが削除されます。シートには常に22行が残っています。理由が分からないのですか?コードは以下のように書かれています。Excel Interop行を繰り返し処理し、一部の行が欠落している行全体を条件付きで削除します。

  List<string> removeList = listofRemovalOfSpecificPublishers; 

      string path = "C:\\Library Automation\\Source\\publishers.xlsx"; 
      var workBookData = GetWorkBookData(path, "Booking Publishers Info"); 
      mWSheet1 = workBookData.mWorkSheet1; 
      Microsoft.Office.Interop.Excel.Range xlRange; 

      xlRange = mWSheet1.UsedRange; 

      for (int i = 1; i <= xlRange.Rows.Count; i++) 
      { 
       string publisher = Convert.ToString(xlRange.Cells[i, 3].Value); //publisher column 
       string bookState = Convert.ToString(xlRange.Cells[i, 8].Value); //status column 
       if (carrier != "Publisher" && Convert.ToString(xlRange.Cells[i, 1].Value) != "Status") 
       { 

        if (removeList.Contains(publisher) && bookState == "INVALID") 
        { 
         xlRange.Cells[i, 1].EntireRow.Delete(null); 

        } 
       } 

      } 

      workBookData.mWorkbook.RefreshAll(); 
      workBookData.mWorkbook.Save(); 
      workBookData.mWorkbook.Close(Missing.Value, Missing.Value, Missing.Value); 

私は欠けているものがあるかどうかを知る必要があります。あなたの助けと時間をありがとう。

+3

行を削除するときは、下から上に向かって作業する必要があります。 –

+0

それを得ました!ありがとう、私はそれをテストします! – thilanka1989

答えて

1

あなたの質問にはティム・ウィリアムズさんから回答がありましたが、私はその問題について少し説明を追加します。

行の先頭から最後までの行のリストからforループを実行しているとき、たとえば行10に、インデックス10になっていて、条件を満たす場合は行10を削除してからindex = index + 1の行にジャンプしてください。

これは問題が発生したときです。 10行目を削除すると、はすべての行を1行下にプッシュします、11のインデックスの行は実際に12の行になり、11のインデックスの古い行はインデックスになりますあなたが削除を使って作業しているときはいつでも、行か列かにかかわらず、常に下から上に移動します。

+0

ティム・ウィリアムズは私がボトムアップして問題を解決したと言いました。さらなる説明をいただきありがとうございます。 – thilanka1989

関連する問題