2016-05-12 8 views
0

//ここで列1から始まるすべての行を削除しようとしています から35までですが、レコードを削除している間にレコードが残っており、 すべての行を削除しません。 問題が実際にどこにあるのかわかりません。タスクマネージャの問題ですが、すでにexeファイルを強制終了しています。 2行目から最後の行までのすべての行をループしているので、レコードが空でない場合は、get_rangeの助けを借りてレコードを1つずつ削除しています。Excelのレコードを1列目から35行目まで削除しようとしています

public static void GetIncidentExcel(string Incident_Path, List<excelObj> ListTickets) 
{ 

    lastRow = 0; 
    MyApp = new Excel.Application(); 
    // MyApp.Visible = false; 
    MyBook = MyApp.Workbooks.Open(Incident_Path); 
    MySheet = (Excel.Worksheet)MyBook.Sheets["BOXI_summary"]; // Explict cast is not required here 
    lastRow = MySheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row; 

    for (int i = 2; i <= lastRow; i++) 
    { 
     Array MyValues = (Array)MySheet.get_Range("A" + i.ToString(), "AI" + i.ToString()).Cells.Value; 

     if (Convert.ToString(MyValues.GetValue(1, 1)) == "" && Convert.ToString(MyValues.GetValue(1, 2)) == "" && Convert.ToString(MyValues.GetValue(1, 3)) == "" && 
      Convert.ToString(MyValues.GetValue(1, 4)) == "" && Convert.ToString(MyValues.GetValue(1, 5)) == "" && Convert.ToString(MyValues.GetValue(1, 6)) == "" && 
      Convert.ToString(MyValues.GetValue(1, 7)) == "" && Convert.ToString(MyValues.GetValue(1, 8)) == "" && Convert.ToString(MyValues.GetValue(1, 9)) == "" && 
      Convert.ToString(MyValues.GetValue(1, 10)) == "" && Convert.ToString(MyValues.GetValue(1, 11)) == "" && Convert.ToString(MyValues.GetValue(1, 12)) == "" && 
      Convert.ToString(MyValues.GetValue(1, 13)) == "" && Convert.ToString(MyValues.GetValue(1, 14)) == "" && Convert.ToString(MyValues.GetValue(1, 15)) == "" && 
      Convert.ToString(MyValues.GetValue(1, 16)) == "" && Convert.ToString(MyValues.GetValue(1, 17)) == "" && Convert.ToString(MyValues.GetValue(1, 18)) == "" && 
      Convert.ToString(MyValues.GetValue(1, 19)) == "" && Convert.ToString(MyValues.GetValue(1, 20)) == "" && Convert.ToString(MyValues.GetValue(1, 21)) == "" && 
      Convert.ToString(MyValues.GetValue(1, 22)) == "" && Convert.ToString(MyValues.GetValue(1, 23)) == "") 
      break; 
     else 
     { 
      Excel.Range cells = MySheet.get_Range("A" + i.ToString(), "AI" + i.ToString()); 
      cells.Delete(); 
     } 

    } 
+0

ループを逆方向に実行してみてください。 –

+0

y u '>' tho? :O – Kritner

+0

私は後ろにループしていますが、その作業はできません。いくつかのレコードは元に戻されません。 – Dilip

答えて

1

このようなものを使ってループを交換してみてください:

for (int i = lastRow; i >= 2; i--) 
{ 
    if (MyApp.WorksheetFunction.CountA(MySheet.get_Range("A" + i.ToString(), "AI" + i.ToString())) == 0) 
    { 
     MySheet.get_Range("A" + i.ToString(), "AI" + i.ToString()).Delete(Excel.XlDirection.xlUp); 
    } 
} 

すべてのセルが空であるかどうかをチェックするWorksheetFunctionオブジェクトを使用することができ、および行を削除するときに常にループべき後方

+0

貴重なご意見ありがとうございます。しかし、再び行は削除されません。 – Dilip

+0

「行」と言うと、実際に_entire_行が削除されますか?または列AのセルだけがAI?削除しようとすると例外が発生していますか? –

+0

はい、行全体ではなく、列1〜35のすべての行です。 – Dilip

関連する問題