Wie bekomme ich einen Excel-Bereich mit Zeilen- und Spaltennummern in VSTO / C #?

Ich denke, die Frage fasst es zusammen. Gibt es zwei Integer für Zeile und Spalte oder vier Integer für Zeile und Spalte für die beiden Ecken eines Bereichs, wie bekomme ich ein Sortierobjekt für diesen Bereich.

  • Wie kann ich das .Onkey-Ereignis in einem Excel-Add-In mit Visual Studio 2010 erstellen?
  • VSTO (Excel): Alle benannten Distanzbereiche innerhalb eines Bereichs abrufen
  • Schreiben Sie in Zelle in Excel mit c #
  • c # Excel 2007 Addin - auf anderen PC installieren
  • VSTO ThisWorkbook-Eigenschaft
  • .net c # Excel-Spalte AutoFit ohne Schrumpfung
  • Wie wird das aktuelle Arbeitsmappenfenster behandelt?
  • Wo sollten von VSTO entwickelte Erweiterungen installiert werden?
  • 7 Solutions collect form web for “Wie bekomme ich einen Excel-Bereich mit Zeilen- und Spaltennummern in VSTO / C #?”

    Wo der Bereich mehrere Zellen ist:

    Excel.Worksheet sheet = workbook.ActiveSheet; Excel.Range rng = (Excel.Range) sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,3]); 

    Wo Bereich eine Zelle ist:

     Excel.Worksheet sheet = workbook.ActiveSheet; Excel.Range rng = (Excel.Range) sheet.Cells[1, 1]; Excel.Worksheet sheet = workbook.ActiveSheet; Excel.Worksheet sheet = workbook.ActiveSheet; Excel.Range rng = (Excel.Range) sheet.Cells[1, 1]; 

    Die angegebene Antwort wird einen Fehler auslösen, wenn sie in Microsoft Excel 14.0 Object Library verwendet wird. object enthält keine Definition für get_range. Stattdessen verwenden

     int countRows = xlWorkSheetData.UsedRange.Rows.Count; int countColumns = xlWorkSheetData.UsedRange.Columns.Count; object[,] data = xlWorkSheetData.Range[xlWorkSheetData.Cells[1, 1], xlWorkSheetData.Cells[countRows, countColumns]].Cells.Value2; int countRows = xlWorkSheetData.UsedRange.Rows.Count; int countRows = xlWorkSheetData.UsedRange.Rows.Count; int countColumns = xlWorkSheetData.UsedRange.Columns.Count; object[,] data = xlWorkSheetData.Range[xlWorkSheetData.Cells[1, 1], xlWorkSheetData.Cells[countRows, countColumns]].Cells.Value2; int countColumns = xlWorkSheetData.UsedRange.Columns.Count; int countRows = xlWorkSheetData.UsedRange.Rows.Count; int countColumns = xlWorkSheetData.UsedRange.Columns.Count; object[,] data = xlWorkSheetData.Range[xlWorkSheetData.Cells[1, 1], xlWorkSheetData.Cells[countRows, countColumns]].Cells.Value2; 

    Sie können so einen Wert abrufen

     string str = (string)(range.Cells[row, col] as Excel.Range).Value2 ; 

    Wählen Sie den gesamten Bereich aus

     Excel.Range range = xlWorkSheet.UsedRange; 

    Quelle :

    http://csharp.net-informations.com/excel/csharp-read-excel.htm

    flammend

    Angesichts des gleichen Problems fand ich die schnellste Lösung, um die Zeilen der Zellen, die ich sortieren wollte, tatsächlich zu scannen, die letzte Zeile mit einem nicht leeren Element zu bestimmen und dann diese Gruppierung auszuwählen und zu sortieren.

      Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r Dim lastrow Als Integer  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r lastrow = 0  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r Für r = 3 bis 120  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r Wenn Zellen (r, 2) = "" Dann  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r Set rng = Bereich (Zellen (3, 2), Zellen (r - 1, 2 + 6))  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r rng.Wählen Sie  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r rng.Sort Key1: = Range ("h3"), order1: = xlDescending, Header: = xlGuess, DataOption1: = xlSortNormal  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r r = 205  Dim lastrow As Integer lastrow = 0 For r = 3 To 120 If Cells(r, 2) = "" Then Dim rng As Range Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6)) rng.Select rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal r = 205 End If Next r 

    Ich fand eine gute kurze Methode, die gut funktioniert …

     Dim x, y As Integer x = 3: y = 5 ActiveSheet.Cells(y, x).Select ActiveCell.Value = "Tada" Dim x, y Als Integer Dim x, y As Integer x = 3: y = 5 ActiveSheet.Cells(y, x).Select ActiveCell.Value = "Tada" x = 3: y = 5 Dim x, y As Integer x = 3: y = 5 ActiveSheet.Cells(y, x).Select ActiveCell.Value = "Tada" ActiveSheet.Cells (y, x) .Wählen Sie Dim x, y As Integer x = 3: y = 5 ActiveSheet.Cells(y, x).Select ActiveCell.Value = "Tada" 

    In diesem Beispiel wählen wir 3 Spalten über und 5 Reihen nach unten und setzen dann "Tada" in die Zelle.

    UsedRange funktioniert gut mit "virgins" Zellen, aber wenn deine Zellen in der Vergangenheit gefüllt sind, dann wird UsedRange Ihnen den alten Wert liefern.

    Beispielsweise:

    "Denken Sie in ein Excel-Blatt, das Zellen A1 bis A5 mit Text gefüllt haben". In diesem Szenario muss UsedRange implementiert werden als:

     Long SheetRows; SheetRows = ActiveSheet.UsedRange.Rows.Count; Lange Blätter; Long SheetRows; SheetRows = ActiveSheet.UsedRange.Rows.Count; 

    Eine Uhr zu SheetRows Variable muss einen Wert von 5 nach der Ausführung dieses paar Zeilen anzeigen.

    Q1: Aber was passiert, wenn der Wert von A5 gelöscht wird?

    A1: Der Wert von SheetRows wäre 5

    Q2: Warum das?

    A2: Da MSDN die Eigenschaft UsedRange als:

    Ruft ein Microsoft.Office.Interop.Excel.Range-object ab, das alle Zellen repräsentiert , die jederzeit einen Wert enthalten haben .


    Also, die Frage ist: Exist einige / irgendwelche Workaround für dieses Verhalten?

    Ich denke in 2 Alternativen:

    1. Vermeiden Sie es, den Inhalt der Zelle zu löschen, bevorzugen Sie die Löschung der gesamten Zeile (klicken Sie mit der rechten Maustaste in die Zeilennummer, dann "Zeile löschen".
    2. Verwenden Sie CurrentRegion anstelle von UsedRange-Eigenschaft wie folgt:

     Long SheetRows; SheetRows = ActiveSheet.Range("A1").CurrentRegion.Rows.Count; Lange Blätter; Long SheetRows; SheetRows = ActiveSheet.Range("A1").CurrentRegion.Rows.Count; 

    Wenn du willst wie Cells(Rows.Count, 1).End(xlUp).Row kannst du es machen.

    Verwenden Sie einfach den folgenden Code:

     using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; Verwenden von Excel = Microsoft.Office.Interop.Excel; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; string xlBk = @ "D: \ Test.xlsx"; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; Excel.Application xlApp; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; Excel.Workbook xlWb; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; Excel.Worksheet xlWs; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; Excel.Range rng; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; int iLast; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; xlApp = new Excel.Application (); using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; xlWb = xlApp.Workbooks.Open (xlBk, 0, true, 5, "", "", wahr, using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\ t", false, false, 0, true, 1, 0); using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; xlWs = (Excel.Worksheet) xlWb.Worksheets.get_Item (1); using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; iLast = xlWs.Rows.Count; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; rng = (Excel.Range) xlWs.Cells [iLast, 1]; using Excel = Microsoft.Office.Interop.Excel; string xlBk = @"D:\Test.xlsx"; Excel.Application xlApp; Excel.Workbook xlWb; Excel.Worksheet xlWs; Excel.Range rng; int iLast; xlApp = new Excel.Application(); xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1); iLast = xlWs.Rows.Count; rng = (Excel.Range)xlWs.Cells[iLast, 1]; iLast = rng.get_End(Excel.XlDirection.xlUp).Row; 
    Spreadsheet (Microsoft Excel) makes working easy.