Trovare l'ultima riga di un file excel

di il
1 risposte

Trovare l'ultima riga di un file excel

Scusate l'intrusione. In un mio progetto in C# tra tante cose apro e uso un file Excel del quale leggo, scrivo, modifico cancello dati, righe e colonne senza problemi. In alcuni casi ho la necessità di trovare l'ultima riga di un foglio excel e per fare questo inizialmente usavo un ciclo while. Aggiungo che il file excel e posto nel main in public in modo da poterlo usare senza problemi in ogni form
public static Excel.Application xApp; // rende globale
public static Excel.Workbook wb; // rende globale
public static Excel.Worksheet ws; // rende globale
Con questa operazione riesco ad utilizzare il file senza problemi: ad es per recuperare un dato uso 
cognome = HomePage.ws.Cells[i, 1].value;
Adesso veniamo al mio problema: per trovare l'ultima riga di un foglio senza usare un ciclo while o for ho trovato questa istruzione
ultima_riga = HomePage.ws.Cells.Find("*", SearchOrder: XlSearchOrder.xlByRows, SearchDirection: XlSearchDirection.xlPrevious).Row;
che funziona senza problemi ma che però trova l'ultima riga massima nel senso che trova l'ultima riga della colonna con il massimo di dati. Se però voglio l'ultima riga di una particolare colonna devo modificare l'istruzione nel seguente modo
ultima_riga = GetLastRowInColumn(ws, "1");
dove le routine interessate sono
public static int GetLastRow(Worksheet ws)
{
   return ws.Cells.Find("*", SearchOrder: XlSearchOrder.xlByRows, SearchDirection: XlSearchDirection.xlPrevious).Row;
}
public static int GetLastRowInColumn(HomePage ws, string column)
{
   for (int x = GetLastRow(HomePage.ws); x >0; x--)
   {
       if (("" + HomePage.ws.Range[column + x].Value) != "")
           return x;
   }
   return 0;
}
dove la GetLastRow è quella che funziona anche per tutte le colonne.  l problema che non so risolvere è cosa mettere al posto del folglio attivo ws nella
ultima_riga = GetLastRowInColumn(ws, "1");
Ho provato di tutto: semplice ws, HomePage.ws e altro ma il compilatore continua a darmi errore ( ad es con il semplice ws mi dice che ws non esiste nel contesto corrente), Il secondo parametro "1" indica la colonna di ricerca e non da problemi. Cosa accidenti devo mettere? Se qualcuno mi può aiutare gli sarò infinitamente grato. Ripeto posso aggirare il problema con un ciclo while ma vorrei anche capire perchè non funziona. Grazie a tutti

1 Risposte

  • Re: Trovare l'ultima riga di un file excel

    16/01/2026 - spanky ha scritto:

    per trovare l'ultima riga di un foglio senza usare un ciclo while

    Puoi usare il metodo End dell'oggetto Range. È più appropriato. Ti trova l'ultima piena se ad esempio lo usi con la direzione xlDown. Il Find sovrascrive le impostazione del "Cerca/Sostituisci" dell'applicazione. A me non fa impazzire.

    16/01/2026 - spanky ha scritto:

    Adesso veniamo al mio problema

    Per come hai scritto al funzione ho due domande:

    1. Che tipo di oggetto è HomePage?
    2. Sei certo che esponga la proprietà ws?

    E se anche lo espone, perché lo dichiari come parametro ma poi nel corpo del metodo lo richiami con HomePage.ws.blablabla? C'è confusione, come anche nel "Range[column + x]"... column è string. Quel "+" non fa quel che pensi.

    Diciamo che, se vuoi generalizzare la funzione, io la scriverei

    public static int GetLastRowInColumn(Worksheet ws, string column)
    {
      return ws.Cells.Items[1, column].End(xlDown).Offset[1].Row
    }
Devi accedere o registrarti per scrivere nel forum
1 risposte