[Risolto] Elenco dei fogli

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

[Risolto] Elenco dei fogli

Messaggio da amax »

Buongiorno, ho la necessità di realizzare una sorta di indice dei fogli di un file.
Naturalmente so che c'è il navigatore, so come estrarre il nome del foglio, ma non so come realizzare un elenco di tutti fogli del file che si aggiorni ogni volta che aggiungo o cancello un foglio o gli cambio nome o gli cambio posizione.

Esiste un metodo per poter far ciò?

Grazie
Ultima modifica di amax il lunedì 12 giugno 2023, 16:26, modificato 1 volta in totale.
macOS 14 Sonoma: LibreOffice 24.2.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Elenco dei fogli

Messaggio da patel »

Con questa macro

Codice: Seleziona tutto

Sub ScriviNomiFogli
   oDoc=ThisComponent
   oSheets=oDoc.Sheets
   oSheet=oSheets(0)
   riga_inizio=0 'riga 1 se uguale a 0
   col_inizio=0    'col A se uguale a 0
   for i=0 to oSheets.count-1
      oSheet.getCellByPosition(col_inizio,riga_inizio+i).string=oSheets.getbyIndex(i).Name
   next
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

Wow, ottimo GRAZIE.

come posizionarli sulla riga colonna è semplice (lo hai scritto), ma si va a posizionare sul primo foglio, come posso indicargli un foglio specifico?

Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

e se ci fosse la possibilità di eliminare qualche foglio (tipo il primo dove è presente l'elenco).
Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

trovato
grazie
macOS 14 Sonoma: LibreOffice 24.2.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Elenco dei fogli

Messaggio da patel »

Se l'hai trovato indica la soluzione, potrebbe essere utile ad altri.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

patel ha scritto: giovedì 1 giugno 2023, 20:21 Se l'hai trovato indica la soluzione, potrebbe essere utile ad altri.
Hai ragione ma stavo studiando ancora e non ho capito ancora una cosa.
Al tuo codice ho inserito dei commenti per renderlo più chiaro.
Ipotizzando un file con 10 fogli.
Con questo codice inserisco nel foglio1 alla riga 1 e colonna 1 l'elenco di tutti i fogli (dal foglio1 al foglio10).

Codice: Seleziona tutto

Sub ElencoFogliSuFoglio1
   oDoc=ThisComponent
   oSheets=oDoc.Sheets
   oSheet=oSheets(0) 'foglio dove inserire l'elenco foglio1 uguale 0, foglio2 uguale 1
   riga_inizio=0 'riga 1 se uguale a 0
   col_inizio=0   'col A se uguale a 0
   for i=0 to oSheets.count-1 'Elenco dei fogli 0 uguale al primo -1 uguale ad ultimo, -2 uguale penultimo
      oSheet.getCellByPosition(col_inizio,riga_inizio+i).string=oSheets.getbyIndex(i).Name next
End Sub
Con questo codice inserisco nel foglio2 alla riga 1 e colonna 1 l'elenco dal foglio2 al foglio9

Codice: Seleziona tutto

Sub ElencoFogliSuFoglio2
   oDoc=ThisComponent
   oSheets=oDoc.Sheets
   oSheet=oSheets(1) 'foglio dove inserire l'elenco foglio 1 uguale 0
   riga_inizio=0 'riga 1 se uguale a 0
   col_inizio=0   'col A se uguale a 0
   for i=1 to oSheets.count-2 'Elenco dei fogli 0 uguale al primo -1 uguale ad ultimo, -2 uguale penultimo
      oSheet.getCellByPosition(col_inizio,riga_inizio+i).string=oSheets.getbyIndex(i).Name
   next
End Sub
La cosa che non ho ancora capito, nel secondo caso, come mai l'elenco non parta dalla riga 1 ma dalla 2. Naturalmente modificando il posizionamento ottengo lo stesso il risultato, ma non è automatico e si rischia sempre di commettere degli errori.

Spero di essere stato chiaro nella spiegazione.

Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Elenco dei fogli

Messaggio da patel »

Nel secondo caso hai scritto
for i=1 to oSheets.count-2
facendo partire i da 1 invece che da 0 come nel primo caso.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

patel ha scritto: lunedì 5 giugno 2023, 9:27 Nel secondo caso hai scritto
for i=1 to oSheets.count-2
facendo partire i da 1 invece che da 0 come nel primo caso.
esatto e l'obiettivo è proprio quello di far partire l'elenco dal secondo foglio. In questo caso però vorrei che l'elenco partisse dalla riga indicata nella macro. Con questo codice si ottiene che non venga scritta la prima riga (che dovrebbe contenere il primo foglio) e non che l'elenco parta dal secondo foglio.
Allego file sperando sia più chiaro cosa intendo dire.
Allegati
Elenco Fogli.ods
(13.4 KiB) Scaricato 36 volte
macOS 14 Sonoma: LibreOffice 24.2.1
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

La cosa interessante a questo punto sarebbe poter rendere il nome del foglio scritto con la macro anche un link al foglio stesso.
Lo so mi piace sempre alzare un po' l'asticella, ma così si impara.

Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Elenco dei fogli

Messaggio da patel »

Allora devi modificare la macro così

Codice: Seleziona tutto

Sub ElencoFogli
   oDoc=ThisComponent
   oSheets=oDoc.Sheets
   foglio = 1
   oSheet=oSheets(foglio)
   riga_inizio=0 'riga 1 se uguale a 0
   col_inizio=0   'col A se uguale a 0
   riga = riga_inizio
   for i=foglio to oSheets.count-2 'Elenco dei fogli 0 uguale al primo -1 uguale ad ultimo, -2 uguale penultimo
      oSheet.getCellByPosition(col_inizio,riga).string=oSheets.getbyIndex(i).Name
      riga = riga +1
   next
End Sub
e per i link

Codice: Seleziona tutto

Sub ElencoFogliLink
   oDoc=ThisComponent
   oSheets=oDoc.Sheets
   foglio = 1
   oSheet=oSheets(foglio)
   riga_inizio=0 'riga 1 se uguale a 0
   col_inizio=0   'col A se uguale a 0
   riga = riga_inizio
   for i=foglio to oSheets.count-2 'Elenco dei fogli 0 uguale al primo -1 uguale ad ultimo, -2 uguale penultimo
       Nomefoglio=oSheets.getbyIndex(i).Name
       oSheet.getCellByPosition(col_inizio,riga).formulalocal = "=COLLEGAMENTO(""#" & Nomefoglio & ".A1"";""" & Nomefoglio & """)"       
      riga = riga +1
   next
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

Perfetto, così funziona benissimo.
Per poterlo leggere in futuro ho deciso di apportare qualche modifica, ma commetto qualche errore.

Codice: Seleziona tutto

Sub ElencoFogliLink
   oDoc=ThisComponent
   oSheets=oDoc.Sheets
   indice=3 'Foglio dove inserire l'indice 0=primo foglio, 1=secondo...
   I_inizio=0 'Elenco dei fogli dell'indice 0=primo foglio, 2=secondo...
   I_fine=-2 'Dove si ferma l'indice -1=ultimo foglio, -2=penultimo...
   oSheet=oSheets(indice) 
   colonna=8   'colonna A se uguale a 0
   riga=0 'riga 1 se uguale a 0
      for i=I_inizio to oSheets.count(I_fine)
       Nomefoglio=oSheets.getbyIndex(i).Name
       oSheet.getCellByPosition(colonna,riga).formulalocal = "=COLLEGAMENTO(""#" & Nomefoglio & ".A1"";""" & Nomefoglio & """)"       
      riga = riga +1
   next
End Sub

End Sub
Funziona bene lo stesso (crea l'indice ed i collegamenti), ma mi restituisce un'errore.
Screenshot 2023-06-12 alle 08.32.02.png
Screenshot 2023-06-12 alle 08.32.02.png (42.28 KiB) Visto 670 volte
Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Elenco dei fogli

Messaggio da patel »

L'errore sta in questa riga
for i=I_inizio to oSheets.count(I_fine)
oSheets.count è un numero, quindi ci devi sotrarre 2, come l'hai scritto tu sembra un array, quindi:
I_fine = 2 'Dove si ferma l'indice 1=ultimo foglio, 2=penultimo...
for i=I_inizio to oSheets.count - I_fine
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Elenco dei fogli

Messaggio da amax »

Perfetto, Grazie Mille
macOS 14 Sonoma: LibreOffice 24.2.1
Rispondi