Trovare l'ultima riga di un file excel

di il
4 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

4 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
    }
  • Re: Trovare l'ultima riga di un file excel

    Forse non sono stato chiaro; per utilizzare il file excel in ogni form devo usare l'istruzione che ho indicato ad es 

    cognome = HomePage.ws.Cells[i, 1].value;

    che funziona benissimo cioè il passaggio dal form main a ogni altro richiedo questo. Ma il problema non è nella routine 

    public static int GetLastRowInColumn(Worksheet ws, string column)

    ma nella sua chiamata 

    ultima_riga = GetLastRowInColumn(ws, "1");

    dove non so cosa mettere al posto di (ws, ; il "1" indica la colonna di ricerca e non da problemi al compilatore mentre il ws che credo dovrebbe indicare alla routine il foglio excel mi da errore. Ho provato ad usare HomePage.ws al posto del semplice ws ma ho sempre errore.

    Grazie comunque

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

    Per @spanky: ho tolto la formattazione ai tuoi post, era sbagliata.

    Devi formattare col pulsante per il codice solo il codice. Non devi formattare l'intero post.

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

    17/01/2026 - spanky ha scritto:

    Ma il problema non è nella routine 

    public static int GetLastRowInColumn(Worksheet ws, string column)

    ma nella sua chiamata 

    Sono sicuro il problema sia li. La firma del metodo non è quella che riporti tu in seconda battuta e che ho appena citato. È quella che hai riportato nel primo post, ossia

    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;
    }

    Confronta il primo parametro. Tu qui dichiari un oggetto di tipo HomePage e lo chiami ws. Poi nel corpo non lo usi...

    C'è sicuramente qualcosa di sbagliato e ci possiamo arrivare se troviamo risposta alle mie precedenti domande

    16/01/2026 - Sgrubak ha scritto:

    • Che tipo di oggetto è HomePage?
    • Sei certo che esponga la proprietà ws?
Devi accedere o registrarti per scrivere nel forum
4 risposte