[Risolto] Macro per selezionare + tabelle contemporaneamente

Discussioni sull'applicazione di videoscrittura
Rispondi
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

[Risolto] Macro per selezionare + tabelle contemporaneamente

Messaggio da GLF »

Buongiorno,
mi sono appena iscritto a questo forum, per cerare qualcuno che possa aiutarmi a risolvere una situazione che mi capita spesso usando il programma writer per lavoro. Ho provato a cercare la soluzione in internet, ma senza successo.
Il mio problema è questo; ho un file di testo scritto in write che contiene al suo interno numerose tabelle. Avrei la necessità di selezionare contemporaneamente le tabelle da pag. X a pag. y per poi effettuare su di esse una serie di formattazioni comuni (es. cambiare il colore di sfondo, applicare un bordo, ecc..).
Mi spiego meglio. Quello che mi servirebbe è una macro che si limiti a selezionare un gruppo di tabelle contenute in un determinato intervallo di pagine. Fatto questo, la mia intenzione, se possibile, è quella di cliccare sul tasto "Proprietà tabelle" e da li cambiare a tutte le tabelle selezionate il tipo di formattazione che, di volta in volta, mi serve. Una volta potrebbe servirmi di cambiare a tutte lo sfondo, un'altra volta il contorno o un'altra ancora entrambe le cose assieme e così via. Sto chiedendo troppo? io purtroppo non ho nessuna conoscenza di macro e di programmazione e di conseguenza non conosco potenzialità e limiti di questi strumenti.
Grazie a tutti e buona giornata.
Ultima modifica di charlie il martedì 10 febbraio 2015, 10:12, modificato 3 volte in totale.
Motivazione: Inserito segno di spunta verde
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Selezionare più tabelle contemporaneamente

Messaggio da charlie »

Ciao,Il problema principale per chi pensa di dare aiuto è quello di dover ricostruire le condizioni in cui si trova chi chiede aiuto. Se alleghi il tuo file, sarà più facile per tutti.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Selezionare più tabelle contemporaneamente

Messaggio da GLF »

Provvedo subito!
Quello che allego è un file a cui ho tolto le parti non significative. In esso ci sono numerose tabelle. Supponiamo che io voglia dare uno sfondo giallo e un bordo più spesso a tutte le tabelle che vanno da pag. 3 a pag. 52. Esiste la possibilità di creare una macro che me le selezioni tutte per poi cliccare sul "Proprietà tabella" e da li applicare a tutte contemporaneamente le formattazioni che di volta in volta mi servono?
Ancora, grazie. Ciao.
Allegati
00-PSC-ROCCA DI ROMANENGO E CASCINETTA.odt
(67.56 KiB) Scaricato 378 volte
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Selezionare più tabelle contemporaneamente

Messaggio da charlie »

Ciao, vedo che nessuno risponde. Prova a modificare il titolo con: Macro per ... Potresti attirare maggiormente l'attenzione di chi si intende di macro.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da GLF »

Ok, ci provo.
Grazie.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da unlucky83 »

Scrivo solo per comunicare che ci sto lavorando su nei miei ritagli di tempo, ma la selezione multipla delle tabelle mi sta dando dei problemi. Appena concludo qualcosa di utile mi rifarò vivo :)
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da GLF »

Sei veramente molto gentile. Grazie mille!
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da unlucky83 »

Eccomi di nuovo qui
Cercare di selezionare un certo numero di tabelle per poi aprire il menu contestuale con il tasto destro è una strada non percorribile. Anche con le macro si può selezionare solo una tabella alla volta.

Ho quindi cambiato strategia e cercato di fare una macro che ti possa servire.
Espongo la strategia scelta e il funzionamento della macro:
1-Personalizzi una tabella, per esempio la prima di pagina 6, che è una 2x4 (bordi e sfondi cella). Tale tabella sarà il modello che la macro userà per personalizzare altre tabelle.
2-Una volta fatte le modifiche volute, avvi la macro (che ho chiamato "Test"). Tale macro ti chiede di inserire 3 informazioni:
I-il nome della tabella da prendere come riferimento (il nome lo leggi sulla barra inferiore quando porti il cursore all'interno della tabella)
aaa.png
II-il numero di pagina in cui iniziare a cercare le tabelle da modificare
III-il numero dell'ultima pagina su cui cercare le tabelle da modificare
3-la macro, una volta ottenuti questi tre dati, applica i bordi della tabella di riferimento a tutte le tabelle presenti nell'intervallo individuato dalle pagine che hai indicato
4-la macro, inoltre, applicherà anche gli stessi colori di sfondo a tutte le tabelle di quell'intervallo, che hanno le stesse dimensioni della tabella di riferimento (quindi se la tabella di riferimento è una 2x4, solo le tabelle 2x4 cambieranno i colori di sfondo)

Nota:
Durante i punti 3 e 4, il cursore all'interno del documento, salterà rapidamente da una tabella ad un'altra, passando per tutte le tabelle presenti, ma i cambiamenti si avranno solo nelle tabelle che rispettano i criteri sopra esposti.

Allego anche il codice:

Codice: Seleziona tutto

sub test
dim pagI,pagF
oFrame = ThisComponent.CurrentController.Frame
oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")

oTables=ThisComponent.getTextTables()
nomeTabRif=inputbox("scrivi nome tabella riferimento")
oTabRif=oTables.getbyName(nomeTabRif)


ThisComponent.getCurrentController().select(oTabRif)
oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
oSel=thiscomponent.CurrentSelection
NomeRangeRif=oSel.RangeName

pagI=inputbox("Seleziona pagina di inizio")
pagF=inputbox("Seleziona pagina di fine")

For i = 1 To oTables.getCount() - 1
    oTable = oTables.getByIndex(i)
    ThisComponent.getCurrentController().select(oTable)
	view_cursor=ThisComponent.CurrentController.ViewCursor
	inpagina=view_cursor.getPage()	
	if inpagina>=cint(pagI) and inpagina<=cint(pagF) then 
		oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
		oSel=thiscomponent.CurrentSelection
		NomeRange=oSel.RangeName

		oTable.setpropertyvalue("TableBorder",oTabRif.getpropertyvalue("TableBorder"))
		oTable.setpropertyvalue("BackColor",oTabRif.getpropertyvalue("BackColor"))
		if NomeRange=NomeRangeRif and oTabRif.Name<>oTable.Name then
			for k=0 to ubound(oTabRif.DataArray,1)
				for kk=0 to ubound(oTabRif.DataArray(k),1)
					oTable.getCellByPosition(kk,k).setpropertyvalue("BackColor",oTabRif.getCellByPosition(kk,k).getpropertyvalue("BackColor"))
				next
			next
		end if
   	end if
next
ThisComponent.getCurrentController().select(oTabRif)
msgbox "Fine"
end sub
Allegati
00-PSC-ROCCA DI ROMANENGO E CASCINETTA.odt
(60.14 KiB) Scaricato 311 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da unlucky83 »

Ulteriore nota:
C'è una tabella nel documento che dava problemi alla macro, la tabella chiamata "Tabella95", che nonostante il nome, è la tabella con index 0.
Non sò che tabella sia, la vedo nell'elenco del Navigatore, nel quale compare come tabella nascosta (voce in grigio), ma non riesco a mostrarla.
Per non far andare in errore la macro, quindi, ho impostato come indice iniziale per ciclare le tabelle il valore 1, così da saltarla.

Mi farebbe comunque piacere capire come si può mostrare una tabella nascosta, perchè non ci arrivo :D
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da GLF »

Leggo solo ora la tua risposta. Al momento non ho la possibilità di provare la tua macro, ma conto di riuscirci stasera, poi ti farò sapere.
Per quanto riguarda la "Tabella 95", non ti saprei dire. questi sono file che passano anche a me, di solito in formato doc e poi io debbo sistemarli e integrarli aggiungendo altri dati.
Grazie infinite per la tua disponibilità e il tuo aiuto.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da unlucky83 »

Capito. E' una tabella che si genera passando dal formato Doc al formato Odt.
Provando la visualizzazione "Layout web", il navigatore mi indica come prima tabella
la "Tabella94" che nell'altra visualizzazione non c'era, mentre la "Tabella95" compare come seconda.
Con file odt originali non ci sono invece tabelle nascoste di questo tipo.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da GLF »

Ieri sera ho testato la tua macro e funziona! Grazie mille.
L'unica cosa che non riesco a fare è modificare la larghezza delle tabelle, ma poco male, non si può avere tutto nella vita!
Ancora molte grazie!

P.s.: io ho aperto questa discussione su forum Majorana 2 e lì, il moderatore, vedendo che non ottenevo risposte mi ha consigliato di rivolgermi a questo forum.
Tutto questo per chiedere se posso comunicare anche a loro la risoluzione del mio problema e, citando la fonte, allegare la macro in oggetto. Grazie.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro per selezionare + tabelle contemporaneamente

Messaggio da charlie »

Certo, stai parlando di un Forum amico ! ;)
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro per selezionare più tabelle contemporaneamente

Messaggio da unlucky83 »

Ma certo che puoi.
Vuoi anche cambiare le dimensioni delle tabelle? Quando ho del tempo provo ad aggiungere questa funzionalità alla macro
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare + tabelle contemporaneam

Messaggio da GLF »

Beh, non so cosa dire, Grazie!
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da unlucky83 »

Ho una nuova macro

Codice: Seleziona tutto

sub test
dim pagI,pagF
oFrame = ThisComponent.CurrentController.Frame
oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")

oTables=ThisComponent.getTextTables()
nomeTabRif=inputbox("scrivi nome tabella riferimento")
oTabRif=oTables.getbyName(nomeTabRif)
ProprietaTabRif=oTabRif.PropertySetInfo.Properties

ThisComponent.getCurrentController().select(oTabRif)
oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
oSel=thiscomponent.CurrentSelection
NomeRangeRif=oSel.RangeName

pagI=inputbox("Seleziona pagina di inizio")
pagF=inputbox("Seleziona pagina di fine")
For i = 0 To oTables.getCount() - 1
    oTable = oTables.getByIndex(i)
    ThisComponent.getCurrentController().select(oTable)
	view_cursor=ThisComponent.CurrentController.ViewCursor
	inpagina=view_cursor.getPage()	

	if inpagina>=cint(pagI) and inpagina<=cint(pagF) then 
		oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
		oSel=thiscomponent.CurrentSelection
		NomeRange=oSel.RangeName
		if NomeRange=NomeRangeRif and oTabRif.Name<>oTable.Name then
			ProprietaTab=oTable.PropertySetInfo.Properties
			if ubound(ProprietaTab)=ubound(ProprietaTabRif) then
				for k=1 to ubound(ProprietaTab)
					Cosa=ProprietaTab(k).Name
					Pmodello=oTabRif.getpropertyvalue(Cosa)
					on Error resume next
					oTable.setpropertyvalue(Cosa,Pmodello)
				next
			end if
			for k=0 to ubound(oTabRif.DataArray,1)
				for kk=0 to ubound(oTabRif.DataArray(k),1)
					oTable.getCellByPosition(kk,k).setpropertyvalue("BackColor",oTabRif.getCellByPosition(kk,k).getpropertyvalue("BackColor"))
				next
			next
		end if
   	end if
next
ThisComponent.getCurrentController().select(oTabRif)
msgbox "Fine"
end sub
Consiglio di verificarne l'efficacia più di una volta.
Dovrebbe cambiare quasi tutte le proprietà delle tabelle applicando quelle della Tabella presa come riferimento ( dovrebbero essere incluse tutte le impostazioni principali)
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare + tabelle contemporaneam

Messaggio da GLF »

Fantastico, funziona!
Come da te consigliato ho provato a fare un po' di prove. Sono andate quasi tutte bene tranne un paio, ma forse perchè avevo voluto apportare troppe modifiche contemporaneamente.
Non so cos'altro dire se non di nuovo ringraziarti molto!
Buona giornata, ciao.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da GLF »

Buongiorno,
riprendo questa discussione perché avrei un'altra richiesta da fare: è possibile fare in modo che la macro mi cambia automaticamente anche la formattazione del testo di tutte le tabelle?
Confido in voi e spero tanto di si!
Grazie mille.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro per selezionare + tabelle contemporaneam

Messaggio da unlucky83 »

Ciao
Stando così le cose ho cambiato approccio.
-La macro seleziona la tabella modello e la copia
-cerca le tabelle simili nell'intervallo di pagine indicato
-seleziona la tabella simile, salva il contenuto in un'array
-incolla la tabella modello al posto della tabella simile, in modo tale da applicare tutte le modifiche di stile
-riscrive nella tabella i testi che c'erano in precedenza, che vengono persi con il punto precedente

Codice: Seleziona tutto

sub test
dim pagI,pagF
dim Valori() 
oFrame = ThisComponent.CurrentController.Frame
oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")

oTables=ThisComponent.getTextTables()
nomeTabRif=inputbox("scrivi nome tabella riferimento")
'nomeTabRif="Tabella1"
oTabRif=oTables.getbyName(nomeTabRif)
ProprietaTabRif=oTabRif.PropertySetInfo.Properties

ThisComponent.getCurrentController().select(oTabRif)
oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
oDispHelper.executeDispatch(oFrame, ".uno:Copy", "", 0, Array())
oSel=thiscomponent.CurrentSelection
NomeRangeRif=oSel.RangeName

pagI=inputbox("Seleziona pagina di inizio")
pagF=inputbox("Seleziona pagina di fine")
'pagI=1
'pagF=4
For i = 0 To oTables.getCount() - 1
    oTable = oTables.getByIndex(i)
    ThisComponent.getCurrentController().select(oTable)
	view_cursor=ThisComponent.CurrentController.ViewCursor
	inpagina=view_cursor.getPage()	

	if inpagina>=cint(pagI) and inpagina<=cint(pagF) then 
		oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
		oSel=thiscomponent.CurrentSelection
		NomeRange=oSel.RangeName
		if NomeRange=NomeRangeRif and oTabRif.Name<>oTable.Name then
			Valori=DimArray(ubound(oTabRif.DataArray,1))
			for k=0 to ubound(oTabRif.DataArray,1)
				Valori(k)=raccoltavalori(oTable,k)
			next
			oDispHelper.executeDispatch(oFrame, ".uno:Paste", "", 0, Array())
	   		call ripristinavalori(Valori,oTable)
		end if
   	end if
next
ThisComponent.getCurrentController().select(oTabRif)
msgbox "Fine"
end sub

function raccoltavalori(oTable as object,k as integer)
dim myarray() as string
'msgbox oTable.Name
on error resume next
'msgbox ubound(oTable.DataArray(k),1)
myarray=DimArray(ubound(oTable.DataArray(k),1))
for kk=0 to ubound(myarray)
	myarray(kk)=oTable.getCellByPosition(kk,k).string
next
raccoltavalori=myarray
end function

sub ripristinavalori(Valori,oTable as object)
for k=0 to ubound(Valori)
for kk=0 to ubound(Valori(k))
	oTable.getCellByPosition(kk,k).string=Valori(k)(kk)
next
next
end sub
Allegati
ProvaTabella.odt
(34.12 KiB) Scaricato 205 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da GLF »

Ciao Unlucky83,
intanto grazie per l'aito che non manchi mai di darmi.
Ieri ho provato la tuo nuova macro che però, sembra non funzionare o più probabilmente io non la so usare.
Ho aperto il file che hai allegato, ho selezionato la prima tabella dell'ultima pagina e ho modificato sfondo e altezza dei caratteri. Quindi ho lanciato la macro che all'inizio mi ha chiesto di indicargli la tabella di riferimento, ossia quella modificata prima,e l'intervallo di pagine dove cercare le altre tabelle da modificare. Fatto questo ho dato l'invio e la macro ha iniziato il suo processo però, alla fine, non ha modificato nessuna tabella (io mi aspettavo modificasse quelle simili che si trovano nella stessa pagina). Ho sbagliato qualcosa?
Ancora grazie.
Ciao e buona giornata.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da unlucky83 »

Ciao. Ho provato a modificare l'ultima tabella dell'esempio (Tabella108) e ad applicare le modifiche a tutte le tabelle simili presenti nelle pagine da 1 a 4. La macro mi ha modificato l'unica tabella simile presente nel documento (Tabella47, in pag. 4). Quindi forse hai sbagliato qualcosa, del tipo hai fatto una ricerca nell'intervallo di pagina 1-3...
La macro da lanciare è la macro "test"
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da GLF »

Ciao,
ho fatto nuovamente una prova e mi sono accorto che effetivamente la formattazione dei testi viene cambiata, mentre le altre formattazioni no.
Quindi forse non avevo capito che, questa macro, serve solo per cambiare la formattazione dei testi, mentre per cambiare tutte le altre formattazioni della tabella devo usare quella che mi avevi fornito la volta scorsa: è così?
Di nuovo grazie! Ciao.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da unlucky83 »

Hai ragione!! Non volevo adoperare entrambe le macro, questa doveva sostituire la vecchia versione. ora l'aggiusto e te la invio
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da unlucky83 »

Codice: Seleziona tutto

sub test
dim pagI,pagF
dim Valori() 
oFrame = ThisComponent.CurrentController.Frame
oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")
oTables=ThisComponent.getTextTables()
nomeTabRif=inputbox("scrivi nome tabella riferimento")
oTabRif=oTables.getbyName(nomeTabRif)
ProprietaTabRif=oTabRif.PropertySetInfo.Properties
ThisComponent.getCurrentController().select(oTabRif)
oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
oDispHelper.executeDispatch(oFrame, ".uno:Copy", "", 0, Array())
oSel=thiscomponent.CurrentSelection
NomeRangeRif=oSel.RangeName
pagI=inputbox("Seleziona pagina di inizio")
pagF=inputbox("Seleziona pagina di fine")
For i = 0 To oTables.getCount() - 1
    oTable = oTables.getByIndex(i)
    ThisComponent.getCurrentController().select(oTable)
	view_cursor=ThisComponent.CurrentController.ViewCursor
	inpagina=view_cursor.getPage()	
	if inpagina>=cint(pagI) and inpagina<=cint(pagF) then 
		oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
		oSel=thiscomponent.CurrentSelection
		NomeRange=oSel.RangeName
		if NomeRange=NomeRangeRif and oTabRif.Name<>oTable.Name then
			Valori=DimArray(ubound(oTabRif.DataArray,1))
			for k=0 to ubound(oTabRif.DataArray,1)
				Valori(k)=raccoltavalori(oTable,k)
			next
			oDispHelper.executeDispatch(oFrame, ".uno:Paste", "", 0, Array())
	   		call ripristinavalori(Valori,oTable,oTabRif)
		end if
   	end if
next
ThisComponent.getCurrentController().select(oTabRif)
msgbox "Fine"
end sub

function raccoltavalori(oTable as object,k as integer)
dim myarray() as string
'msgbox oTable.Name
on error resume next
'msgbox ubound(oTable.DataArray(k),1)
myarray=DimArray(ubound(oTable.DataArray(k),1))
for kk=0 to ubound(myarray)
	myarray(kk)=oTable.getCellByPosition(kk,k).string
next
raccoltavalori=myarray
end function

sub ripristinavalori(Valori,oTable as object,oTabRif as object)
for k=0 to ubound(Valori)
	for kk=0 to ubound(Valori(k))
		oTable.getCellByPosition(kk,k).string=Valori(k)(kk)
		oTable.getCellByPosition(kk,k).setpropertyvalue("BackColor",oTabRif.getCellByPosition(kk,k).getpropertyvalue("BackColor"))
	next
next
end sub

LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare + tabelle contemporaneam

Messaggio da GLF »

Perfetto!!!
Grazie, grazie, grazie!!!
Ciao, buona giornata.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro per selezionare + tabelle contemporaneam

Messaggio da unlucky83 »

C'è ancora una cosa che va sistemata, infatti i bordi della tabella non vengono replicati correttamente

Ho modificato di nuovo il codice, questa volta dovrebbe essere anche più comprensibile come lettura

Codice: Seleziona tutto

REM  *****  BASIC  *****
option explicit

const test as string="no" 'se impostato diversamente, applica lo stile di Tabella1 alle tabelle simili presenti in pagina 1

Sub ApplicaStileTab
dim oSel,oController
'oSel=ThisComponent.CurrentSelection
oController=ThisComponent.CurrentController

dim oFrame,oViewcursor 
oFrame = oController.Frame
'oViewcursor=oController.ViewCursor

dim oDispHelper 'service
oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")

dim oTables,oTabRif,oTable
oTables=ThisComponent.getTextTables()

dim pagI,pagF,nomeTabRif as string 'input

dim NomeRangeRif,NomeRange as string
dim i,k as integer 'indici cicli for
dim inpagina 'pagina della tabella corrente
dim Valori() 'array che conserva il testo della tabella
if test="no" then
	nomeTabRif=inputbox("scrivi nome tabella riferimento")
	pagI=inputbox("Seleziona pagina di inizio")
	pagF=inputbox("Seleziona pagina di fine")
else
	nomeTabRif="Tabella1"
	pagI="1"
	pagF="1"
end if
oTabRif=oTables.getbyName(nomeTabRif)
oController.select(oTabRif)
oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
oDispHelper.executeDispatch(oFrame, ".uno:Copy", "", 0, Array())
oSel=ThisComponent.CurrentSelection
NomeRangeRif=oSel.RangeName

rem cerca tra le tabelle
For i = 0 To oTables.getCount() - 1
    oTable = oTables.getByIndex(i)
	oController.select(oTable)
	oViewcursor=oController.ViewCursor
	inpagina=oViewcursor.getPage()	
	if inpagina>=cint(pagI) and inpagina<=cint(pagF) then 
		oDispHelper.executeDispatch(oFrame, ".uno:SelectTable", "", 0, Array())
		oSel=ThisComponent.CurrentSelection
		NomeRange=oSel.RangeName		
		rem controlla che le tabelle siano simili, ma che non sia la stessa
		if NomeRange=NomeRangeRif and oTabRif.Name<>oTable.Name then
			Valori=DimArray(ubound(oTabRif.DataArray,1))
			for k=0 to ubound(oTabRif.DataArray,1)
				Valori(k)=raccoltavalori(oTable,k)
			next
			oDispHelper.executeDispatch(oFrame, ".uno:Paste", "", 0, Array())
			call ripristinavalori(Valori,oTable,oTabRif)
	   	end if
   	end if
next
oController.select(oTabRif)
msgbox "Fine"
End Sub


function raccoltavalori(oTable as object,k as integer)
dim myarray() as string
dim kk as integer 'indice ciclo
on error resume next
myarray=DimArray(ubound(oTable.DataArray(k),1))
for kk=0 to ubound(myarray)
	myarray(kk)=oTable.getCellByPosition(kk,k).string
next
raccoltavalori=myarray
end function

sub ripristinavalori(Valori,oTable as object,oTabRif as object)
dim ProprietaTabRif,ProprietaCellRif
dim k,kk,kkk as integer 'indici cicli

ProprietaTabRif=oTabRif.PropertySetInfo.Properties
for k=0 to ubound(ProprietaTabRif)
	on error resume next
	oTable.setpropertyvalue(ProprietaTabRif(k).Name,oTabRif.getpropertyvalue(ProprietaTabRif(k).Name))
next
for k=0 to ubound(Valori)
	for kk=0 to ubound(Valori(k))
		ProprietaCellRif=oTable.getCellByPosition(kk,k).PropertySetInfo.Properties
		for kkk=0 to ubound(ProprietaCellRif)
			oTable.getCellByPosition(kk,k).setpropertyvalue(ProprietaCellRif(kkk).Name,oTabRif.getCellByPosition(kk,k).getpropertyvalue(ProprietaCellRif(kkk).Name))
		next
		oTable.getCellByPosition(kk,k).string=Valori(k)(kk)
	next
next
end sub
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
GLF
Messaggi: 33
Iscritto il: martedì 27 gennaio 2015, 8:51

Re: Macro per selezionare + tabelle contemporaneam

Messaggio da GLF »

Ottimo lavoro!
Purtroppo per me, il codice rimane comunque incomprensibile! Non so niente di programmazione.
Grazie mille!
Ciao, alla prossima.
LibreOffice portable V. 6.3.3.2 (x86), su Windows 10
gs1960
Messaggi: 17
Iscritto il: venerdì 14 novembre 2014, 22:00

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da gs1960 »

ciao a tutti.
Scusate se riesumo un vecchissimo post, ma il mio problema è analogo a quello di GLF, quindi mi sembrava stupido ricominciare da capo.

Ho un file con un centinaio di tabelle che devono avere tutte la stessa formattazione, in particolare mi serve ridimensionarle tutte allo stesso modo.
Ciascuna tabella ha due righe, di cui la prima composta da una sola colonna e la seconda da 2, quindi in totale sono 3 celle.
Nella prima riga c'è un'immagine e nella seconda del testo.
La prima riga deve diventare 10.5mm di altezza e la seconda 4.5mm.....Tutto qui.

Ho provato la macro postata, ma non modifica l'altezza delle righe e mi sovrascrive il testo della seconda colonna della seconda riga in tutte le tabelle, prendendo quello che trova nella tabella di riferimento.
Allego un esempio:
Io vorrei rendere tutte le tabelle uguali a quelle di pagina 1, ma in pratica mi scrive C in tutte le tabelle nella seconda colonna della seconda riga e non modifica le altezze delle righe.
Qualcuno potrebbe aiutarmi, per cortesia?
Allegati
prova tabelle.odt
(10.12 KiB) Scaricato 143 volte
OpenOffice 4.1.5 su Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro per selezionare + tabelle contemporaneamente

Messaggio da charlie »

gs1960 ha scritto:cusate se riesumo un vecchissimo post, ma il mio problema è analogo a quello di GLF, quindi mi sembrava stupido ricominciare da capo.
Non so se è stata una buona idea, potresti essere "meno visibile"
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
gs1960
Messaggi: 17
Iscritto il: venerdì 14 novembre 2014, 22:00

Re: [Risolto] Macro per selezionare + tabelle contemporaneam

Messaggio da gs1960 »

Hai ragione, c'è scritto RISOLTO, quindi effettivamente.....
Allora ne apro uno nuovo e magari faccio un rimando a questo :super:
Grazie!
OpenOffice 4.1.5 su Windows 10
Rispondi