2016-12-14 1 views
0

Ich möchte die letzte Zelle finden, die Text enthält. Momentan verwende ich Interop, das funktioniert gut, um die usedRnage zu finden, aber ich möchte nur die letzte Zelle finden, die Text enthält. In diesem Beispiel ist die letzte verwendete Zelle J32. Ich möchte nur den letzten Wert finden, der Text enthält, also sollte er A26 sein.Finde die letzte Zelle mit dem darin enthaltenen Text

enter image description here

enter image description here

Mein Code ist wie Brachen

  Excel.Application xlApp; 
      Excel.Workbook xlWorkBook; 
      Excel.Worksheet xlWorkSheet; 
      Excel.Range range; 

      string str; 


      xlApp = new Excel.Application(); 
      xlWorkBook = xlApp.Workbooks.Open(@"C:\Users\Craig\Desktop\testCell.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
      xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 


      range = xlWorkSheet.UsedRange; 


      // Detect Last used Row/Column - Including cells that contains formulas that result in blank values 
      var iTotalColumns = xlWorkSheet.UsedRange.Columns.Count; 
      var iTotalRows = xlWorkSheet.UsedRange.Rows.Count; 

      //Excel.Range last = xlWorkSheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); 
      //Excel.Range lastRange = xlWorkSheet.get_Range("A1", last); 

      Excel.Application xlCell; 

Excel.Range last = xlWorkSheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); 
      Excel.Range usedRange = xlWorkSheet.get_Range("A1", last); 


      int lastUsedRow = last.Row; 
      int lastUsedColumn = last.Column; 

      xlWorkBook.Close(@"C:\Users\Craig\Desktop\testCell.xlsx", true, null); 
      xlApp.Quit(); 
+0

http://www.cpearson.com/excel/LastCell.aspx – Vityata

Antwort

1

Basierend auf der Tatsache, dass der verwendete Bereich die letzte Zelle, die Text enthalten, sollten Sie Schleife aus der letzten Zelle kann in Der verwendete Bereich für die erste Zelle (eine Schleife für Spalten und eine für Zeilen), um die letzte Zelle auf dem Arbeitsblatt zu finden, die Text enthält. Überprüfen Sie den folgenden Code:

Microsoft.Office.Interop.Excel.Application xlApp; 
Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 
Microsoft.Office.Interop.Excel.Range range; 

string str; 


xlApp = new Microsoft.Office.Interop.Excel.Application(); 
xlWorkBook = xlApp.Workbooks.Open(@"C:\Users\Admin\Desktop\testCell.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 


range = xlWorkSheet.UsedRange; 

Microsoft.Office.Interop.Excel.Range last = xlWorkSheet.Cells.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell, Type.Missing); 


int lastUsedRow = last.Row; 
int lastUsedColumn = last.Column; 

int lastColumn = -1; 

// Loop to find the last column containing text 
for(int i = lastUsedColumn; i > 0; i--) 
{ 
    if(xlWorkSheet.Application.WorksheetFunction.CountA(xlWorkSheet.Columns[i]) > 0) 
    { 
     lastColumn = i; 
     break; 
    } 
} 

int lastRow = -1; 

// Loop to find the last row containing text 
for (int i = lastUsedRow; i > 0; i--) 
{ 
    if (xlWorkSheet.Application.WorksheetFunction.CountA(xlWorkSheet.Rows[i]) > 0) 
    { 
     lastRow = i; 
     break; 
    } 
} 

Console.WriteLine("Last row containing text: " + lastRow); 
Console.WriteLine("Last column containing text: " + lastColumn); 

// Clear formatting of all columns from last cell with text to last cell in used range 
// For columns, you will 
xlWorkSheet.Range[xlWorkSheet.Cells[lastRow, lastColumn+1], xlWorkSheet.Cells[lastUsedRow, lastUsedColumn]].ClearFormats(); 

// Clear formatting of all rows from last cell with text to last cell in used range 
xlWorkSheet.Rows[(lastRow+1) + ":" + lastUsedRow].ClearFormats(); 

Console.ReadLine(); 

xlWorkBook.Close(true); 
xlApp.Quit(); 
+0

Dies funktioniert einwandfrei. Danke –

+0

Gibt es irgendeinen Weg, wie ich nach der letzten Zelle mit Text löschen kann, um den Zellenstil von J32 zu entfernen? –

+0

Sie könnten die Zeilen-/Spaltennummern der letzten Zellen mit Text und die zuletzt verwendete Bereichszelle verwenden, um die Formatierung aller Zellen dazwischen zu entfernen? (hoffe, das ist klar genug) – NavkarJ

Verwandte Themen