[Risolto] Elenco dei fogli
[Risolto] Elenco dei fogli
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
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
Re: Elenco dei fogli
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
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
Re: Elenco dei fogli
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
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
Re: Elenco dei fogli
e se ci fosse la possibilità di eliminare qualche foglio (tipo il primo dove è presente l'elenco).
Grazie
Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
Re: Elenco dei fogli
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
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
Re: Elenco dei fogli
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
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
Spero di essere stato chiaro nella spiegazione.
Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
Re: Elenco dei fogli
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.
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
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
Re: Elenco dei fogli
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 37 volte
macOS 14 Sonoma: LibreOffice 24.2.1
Re: Elenco dei fogli
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
Lo so mi piace sempre alzare un po' l'asticella, ma così si impara.
Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
Re: Elenco dei fogli
Allora devi modificare la macro così
e per i link
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
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
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
Re: Elenco dei fogli
Perfetto, così funziona benissimo.
Per poterlo leggere in futuro ho deciso di apportare qualche modifica, ma commetto qualche errore.
Funziona bene lo stesso (crea l'indice ed i collegamenti), ma mi restituisce un'errore.
Grazie
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
Grazie
macOS 14 Sonoma: LibreOffice 24.2.1
Re: Elenco dei fogli
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
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
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