[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 15.01 Sequoia: LibreOffice 24.8.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 15.01 Sequoia: LibreOffice 24.8.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 15.01 Sequoia: LibreOffice 24.8.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 SubSpero di essere stato chiaro nella spiegazione.
Grazie
macOS 15.01 Sequoia: LibreOffice 24.8.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 63 volte
 
 
macOS 15.01 Sequoia: LibreOffice 24.8.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 15.01 Sequoia: LibreOffice 24.8.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 SubCodice: 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 SubGrazie
macOS 15.01 Sequoia: LibreOffice 24.8.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
