[Risolto] Macro che unisce più file ods in un unico file

Creare una macro - Scrivere uno script - Usare le API
Rispondi
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

[Risolto] Macro che unisce più file ods in un unico file

Messaggio da born2run »

Salve a tutti,

ho realizzato una programma in Calc, con una macro abbastanza lunga che salva come output delle tabelle in ods. sempre della stessa struttura:
-11 righe di intestazione;
- n righe (con n variabie) in cui sulla prima colonna (0) esiste la data in formato testo, sulla colonna (1) i dati che mi servono, e sulla colonna(0) sempre la data ma che ho lasciato in formato seriale, perche era l' unica maniera per fare l'ordinamento cronologico.
(allego file di esempio)
T_17802251781430.ods
esempio tabella
(3.13 KiB) Scaricato 200 volte
Di questi file ne produrró molti nel tempo.

Fatto questo volevo realizzare un'altra macro che:
1) potesse caricare questi file Tabella (inseriti tutti in una directory)
2) unirle tutte in un unico file
3) ordinare ancora cronologicamente per data e salvare in un file unico

(allego anche il file che ho tentato di fare)
CaricaUnisciOrdinaSalva.ods
CaricaUnisciOrdinaSalva
(13.45 KiB) Scaricato 185 volte
Ho provato a fare questo secondo file seguendo alcuni post che ho già trovato in questo forum, ma non sono riuscito nel mio intento. :crazy:
Spero che voi possiate aiutarmi a renderlo funzionante.

Grazie in anticipo!


PS: Il problema sarebbe stato risolto se avessi fatto tutto su un unico file..il primo. Anzi, ero capace di farlo.
L'esigenza di fare una seconda macro che carica i file, li aggrega, li ordina e salva un file unico, nasce dal fatto che non faccio le tabelle tutte assieme, ma le salvo in tempi diversi e quindi il caricatore mi serve per poterle riordinare successivamente.


PS2: non capisco perche ODS salva file .ods che perdono le colonne. E quando vengono riaperti, costringe l 'utente a riempire la solita maschera di conversione di testo in colonne separati da spazi o altri caratteri da scegliere.
Ultima modifica di born2run il martedì 4 giugno 2019, 10:39, modificato 2 volte in totale.
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da patel »

Non ho capito cosa c'entra in questa discussione il primo file allegato che è un file di writer salvato in ods.
Passando al secondo argomento dovresti allegare un paio di file da caricare per provare la macro
-------------------
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
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da born2run »

ciao Patel,
grazie innanzitutto dell'attenzione!
patel ha scritto:Non ho capito cosa c'entra in questa discussione il primo file allegato che è un file di writer salvato in ods.
Il punto cruciale è proprio quello forse.
Il primo file che ho fatto fa dei calcoli e crea n fogli (che sono appunto quelle tabelle, primo file) e, se decido di falro, di quei fogli, selezionando un flag, lui li salva su una directory con un nome che imposto in un pannello.

La tabella che allego è il formato di output salvato dalla macro di un programma in Calc (non ho mai utilizzato writer!). Per fare questo nel programma, richiamo una funzione che ti riporto qui sotto.

Codice: Seleziona tutto

function salva_foglio_tabella_ods(riga_data)

oDoc=thiscomponent
oSheets = oDoc.Sheets()
aSheetNames = oSheets.getElementNames()

oSheet = oSheets.getByName("Date")

oCell = oSheet.getCellByposition(16,riga_data) 'leggi la cella con il path dove salvare il file
cFolder = oCell.getString() ' inserisci il valore nella variabile cFolder

oCell = oSheet.getCellByposition(15,riga_data) 'leggi la cella con il nome file dove salvare il file
cFile = oCell.getString() ' inserisci il valore nella variabile cFile
cFile = Replace(cFile, " ", "_")

'msgbox("riga= " & riga_data & "CFile= " & CFile & "CFolder= " & CFolder)

if prima_volta=0 then
Dim args(2) as new com.sun.star.beans.PropertyValue
else
prima volta=1
end if

  cFilterOptions = ",0,0,1,2/2/2/2/2/2/2/9/9/9/9/9/9/9/9/9/9"
  oDoc = ThisComponent
  oSheet = oDoc.Sheets.getbyname(cFile)
  oDoc.currentcontroller.activesheet = oSheet
  
  args(0).Name = "FilterName"
  args(0).Value = "Text - txt - csv (StarCalc)"
  args(1).Name = "FilterOptions"
  args(1).Value = cFilterOptions
  oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".ods" ), args() )
  
'msgbox ("Il file con nome (" & cFile & ") è stato salvato in " & cFolder )

End function
Utilizzo questa funzione passando semplicemente come parametro la riga della data (prima colonna in un pannello) che desidero stampare, che serve a determinare semplicemente dove leggere sullo stesso pannello alla data riga su due colonne successive, il nome del file ed il percorso in cui salvare che io imposto.

Dalla tua osservazione capisco che molto probabilmente il problema sta tutto nel salvataggio che faccio.
Magari se riesco a salvare quei file in maniera corretta dall'inizio, allora posso evitare i problemi successivi.

Presumo che il problema sia nelle linee

Codice: Seleziona tutto

cFilterOptions = ",0,0,1,2/2/2/2/2/2/2/9/9/9/9/9/9/9/9/9/9"
e

Codice: Seleziona tutto

args(0).Value = "Text - txt - csv (StarCalc)"
Le ho copiate da altre macro che ho trovato su questo forum, e non riesco a trovare sulla documentazione di OO come cambiare questi attributi.
patel ha scritto:Passando al secondo argomento dovresti allegare un paio di file da caricare per provare la macro
Guarda.. ti allego i due file di output che escono quando lancio la routine sopra:
T_17822251783430.ods
(3.3 KiB) Scaricato 167 volte
T_17822251783430.ods
(3.3 KiB) Scaricato 167 volte
Mentre ti allego gli stessi che ottengo se faccio un semplice copia e incolla di quegli stessi fogli in file singoli esterni (diventano Untitled1 e 2) e salvo tranquillamente da dentro ODS con il pulsante del menu normale.
T1.ods
(12.19 KiB) Scaricato 161 volte
T1.ods
(12.19 KiB) Scaricato 161 volte
che presumo sarebbero il formato giusto su cui lavorare con il file aggregatore del post senza avere problemi..

grazie
Alf
Allegati
T_17802251781430.ods
(3.13 KiB) Scaricato 167 volte
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da patel »

born2run ha scritto:

Codice: Seleziona tutto

  
  args(0).Name = "FilterName"
  args(0).Value = "Text - txt - csv (StarCalc)"
  args(1).Name = "FilterOptions"
  args(1).Value = cFilterOptions
  oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".ods" ), args() )
è evidente che l'errore sta nella riga args(0).Value = "Text - txt - csv (StarCalc)"
puoi correggerla registrando una macro che salva correttamente in formato ods.
Prendendo per buoni i file T1 e T2 quale sarebbe il risultato desiderato ? io posso fare una macro che li copia uno dopo l'altro in un foglio, ma non di più
-------------------
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
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da born2run »

patel ha scritto:è evidente che l'errore sta nella riga args(0).Value = "Text - txt - csv (StarCalc)"
puoi correggerla registrando una macro che salva correttamente in formato ods.
si infatti sto cercando di cambiarla.

Codice: Seleziona tutto

function salva_foglio_tabella_csv(riga_data)

oDoc=thiscomponent
oSheets = oDoc.Sheets()
aSheetNames = oSheets.getElementNames()

oSheet = oSheets.getByName("Date")

oCell = oSheet.getCellByposition(16,riga_data) 'leggi la cella con il path dove salvare il file
cFolder = oCell.getString() ' inserisci il valore nella variabile cFolder

oCell = oSheet.getCellByposition(15,riga_data) 'leggi la cella con il nome file dove salvare il file
cFile = oCell.getString() ' inserisci il valore nella variabile cFile
cFile = Replace(cFile, " ", "_")

'msgbox("riga= " & riga_data & "CFile= " & CFile & "CFolder= " & CFolder)

if prima_volta=0 then
Dim args(2) as new com.sun.star.beans.PropertyValue
else
prima volta=1
end if

  cFilterOptions = "32,0,0,1,2/2/2/2/2/2/2/9/9/9/9/9/9/9/9/9/9"
  oDoc = ThisComponent
  oSheet = oDoc.Sheets.getbyname(cFile)
  oDoc.currentcontroller.activesheet = oSheet
  args(0).Name = "FilterName"
  args(0).Value = "Text - txt - csv (StarCalc)"
  args(1).Name = "FilterOptions"
  args(1).Value = cFilterOptions
  oDoc.StoreToURL( ConvertToUrl( cFolder + cFile ), args() )
 
'msgbox ("Il file con nome (" & cFile & ") è stato salvato in " & cFolder )

End function


function salva_foglio_tabella_ods(riga_data)

oDoc=thiscomponent
oSheets = oDoc.Sheets()
aSheetNames = oSheets.getElementNames()

oSheet = oSheets.getByName("Date")

oCell = oSheet.getCellByposition(16,riga_data) 'leggi la cella con il path dove salvare il file
cFolder = oCell.getString() ' inserisci il valore nella variabile cFolder

oCell = oSheet.getCellByposition(15,riga_data) 'leggi la cella con il nome file dove salvare il file
cFile = oCell.getString() ' inserisci il valore nella variabile cFile
cFile = Replace(cFile, " ", "_")

'msgbox("riga= " & riga_data & "CFile= " & CFile & "CFolder= " & CFolder)

if prima_volta=0 then
Dim argomento2(0) as new com.sun.star.beans.PropertyValue
else
prima volta=1
end if

  oDoc = ThisComponent
  oSheet = oDoc.Sheets.getbyname(cFile)
  oDoc.currentcontroller.activesheet = oSheet

  oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".ods" ), argomento2() )
  
'msgbox ("Il file con nome (" & cFile & ") è stato salvato in " & cFolder )

End function


function salva_foglio_tabella_xls(riga_data)

oDoc=thiscomponent
oSheets = oDoc.Sheets()
aSheetNames = oSheets.getElementNames()

oSheet = oSheets.getByName("Date")

oCell = oSheet.getCellByposition(16,riga_data) 'leggi la cella con il path dove salvare il file
cFolder = oCell.getString() ' inserisci il valore nella variabile cFolder

oCell = oSheet.getCellByposition(15,riga_data) 'leggi la cella con il nome file dove salvare il file
cFile = oCell.getString() ' inserisci il valore nella variabile cFile
cFile = Replace(cFile, " ", "_")

'msgbox("riga= " & riga_data & "CFile= " & CFile & "CFolder= " & CFolder)

if prima_volta=0 then
Dim argomento3(0) as new com.sun.star.beans.PropertyValue
else
prima volta=1
end if

  oDoc = ThisComponent
  oSheet = oDoc.Sheets.getbyname(cFile)
  oDoc.currentcontroller.activesheet = oSheet
  argomento3(0).Name = "FilterName"
  argomento3(0).Value = "MS Excel 97"
  oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".xls" ), argomento3() )
 
          
'msgbox ("Il file con nome (" & cFile & ") è stato salvato in " & cFolder )

End function
Uso tre funzioni per salvare nei tre formati.
tutte molto simili come struttura.
La prima funziona (perche gli argomenti sono corretti per un file testo).

Nella terza, sono riuscito a farlo in Excel, trovando che l'argomento deve essere "MS Excel"

Codice: Seleziona tutto

args(0).Value = "MS Excel"
e comunque cancellando gli argomenti, vedo che non mi salva solo il foglio (come fa la prima pe ril CSV) , ma tutto il file (tutti i fogli).

Nella seconda, quella per salvarlo in .ods
Ma come faccio a dirgli che deve restare .ods?
Non devo specificare nulla?
Prendendo per buoni i file T1 e T2 quale sarebbe il risultato desiderato ?
io posso fare una macro che li copia uno dopo l'altro in un foglio, ma non di più
Patel se mi fai una macro per i file T. ti ringrazio....
il problema poi è che devo arrivare a salvare in quel formato i file, e cioe .ods
Per adesso riesco solo a farlo in .csv
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da patel »

il salva con nome si fa semplicemente così

Codice: Seleziona tutto

Sub SalvaConNome
Dim Doc As Object, Sheet As Object, args()
Doc = Thiscomponent
Sheet = Doc.Sheets(0)
fpath = "percorso"
fname = "nomefile.ods"
Filename = "file:///" & fpath & fname
print Filename
Doc.storeToURL(Filename, args())
Doc.close(true)
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
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da patel »

per fare il merge dei file

Codice: Seleziona tutto

REM  *****  BASIC  *****
Dim sPath As String, sPattern As String
Dim nSkip As Long, nIndex As Long, bExpand As Boolean
Dim oSettings, oCurrRg

Sub Main()
	oSettings = createUnoService("com.sun.star.sheet.GlobalSheetSettings")
	dim arr()
	Nindex = 0 ' numero del foglio da copiare, il primo è zero
	nSkip=0 ' num righe intestazione da saltare
	cnt = 0
	spath = "file:///F:/Download/" ' cartella contenente i file ods (nota lo slash / invece che \)
	sPattern = "*.ods"
	bExpand = oSettings.ExpandReferences
	oCurrRg = getCurrentRegion(ThisComponent.Sheets(0).GetCellRangeByName("A1"))
	
	oSettings.ExpandReferences = True
	s = sPath & sPattern
	sFile = dir(s)
	while len(sFile)>0
		sURL = sPath & sFile
		if sURL <> ThisComponent.getURL() then
			on error goto errFile
			doc = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, arr)
			on error goto 0
			processFile(doc, sFile)
			doc.close(True)
			cnt = cnt +1
		endif
		resumeFileErr:
		sFile = dir()
	wend
	oSettings.ExpandReferences = bExpand
	msgbox "Merged "& cnt & " files"
exit sub
errMain:
print error(err), erl, sUrl
errFile:
	Msgbox sFile & " not a spreadsheet file."
	resume resumeFileErr
End Sub

Sub abort(sMsg)
	msgbox sMsg, 16, "Macro Aborted"
	end
End Sub

Sub processFile(doc, sfile)
on local error goto errSheetIndex
	sh1 = doc.Sheets.getByIndex(nIndex)
on local error goto 0
	urg = getUsedRange(sh1)
	src = urg.getRangeAddress()
	src.StartRow = src.StartRow + nSkip
	rg = getRangeByAddress(doc, src)
	a() = rg.getDataArray()
	x = uBound(a())
	y = uBound(a(0))
	adr = oCurrRg.getRangeAddress()
	adr.EndColumn = adr.StartColumn + y' +1
	adr.StartRow = adr.EndRow +1
	adr.EndRow = adr.StartRow + x
	sh = oCurrRg.getSpreadsheet()
	sh.insertCells(adr, com.sun.star.sheet.CellInsertMode.DOWN)
	adr.StartColumn = adr.StartColumn' +1
	rg = getRangeByAddress(sh, adr)
	rg.setDataArray(a())
'	adr.StartColumn = adr.StartColumn -1
'	adr.EndColumn = adr.StartColumn
'	rg = getRangeByAddress(sh, adr)
'	rg.getCellByPosition(0,0).setString(sFile)
'	rg.fillSeries(com.sun.star.sheet.FillDirection.TO_BOTTOM, com.sun.star.sheet.FillMode.SIMPLE,0,0,0)
	oCurrRg = getCurrentRegion(oCurrRg)
exit sub
errSheetIndex:
	msgbox "Invalid sheet index "& nIndex &". Skipping file "& sFile, 48, "SheetMerge Macro"
End Sub
Function getRangeByAddress(obj, oAddr as com.sun.star.table.CellRangeAddress)
on error goto nullErr:
Dim oSheet
	If obj.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
		REM use the sheet specified by given address
		oSheet = obj.getSheets.getByIndex(oAddr.Sheet)
	else
		REM use given object (range/sheet) as parent range
		oSheet = obj
	endif
	getRangeByAddress = oSheet.getCellRangeByPosition(oAddr.StartColumn,oAddr.StartRow,oAddr.EndColumn,oAddr.EndRow)
exit function
nullErr:
	getRangeByAddress = Null
End Function

Function getUsedRange(oSheet)
Dim oRg
	oRg = oSheet.createCursor()
	oRg.gotoStartOfUsedArea(False)
	oRg.gotoEndOfUsedArea(True)
	getUsedRange = oRg
End Function

Function getCurrentRegion(oRange)
Dim oCursor
	oCursor = oRange.getSpreadSheet.createCursorByRange(oRange)
	oCursor.collapseToCurrentRegion
	getCurrentRegion = oCursor
End Function
nella cartella spath ci devono essere soltanto i file ods da copiare
-------------------
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
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da born2run »

Grazie Patel,

ho visto che funziona perfettamente partendo dai file T1 e T2 con formato .ods

Adesso la studio un po per applicare qualche modifica, per completare tutto e chiudere il post.

GRAZIE
alfredo
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da born2run »

Ok,

ho cercato di completare la macro aggiungendo i tre step:
-Unisci (che è la tua routine Merge)
-Ordina (che ordina le prime 4 colonne del foglio Loader secondo la colonna C)
-Salva (che salva il file secondo path e filename inseriti nelle celle apposite)

Ho inserito anche un pulsante Cancella, che mi serve a pulire le prime 4 colonne, se non fossi interessato ad aggiungere i file in coda in un secondo momento.

Per adesso ho tenuto questi tre step in moduli e macro separate.
Ma quando tutto è ok, posso metterle anche in sequenza con CALL tutte insieme.

Allego il file a beneficio di tutti
CaricaUnisciOrdinaSalva.ods
(14.81 KiB) Scaricato 143 volte
Volevo chiederti se fosse possibile salvare le 4 colonne ABCD (che ottengo dalla tua routine) in un foglio diverso dal primo, quello successivo sheet1, in maniera tale da poterlo salvare ed avere SOLO le colonne che desidero. Quando salvo adesos il primo foglio Loader lo fa con tutti i pulsanti e le caselle sulle colonne 5,6 e 7 che a me non servono.

Quale riga della tua routine MERGE è responsabile della scrittura nelle colonne del foglio sheet0?
Se potessi cambiare quello, ed indicargli di scrivere nel foglio sheet1, il gioco è fatto.

Codice: Seleziona tutto

Nindex = 0 ' numero del foglio da copiare, il primo è zero
è questa?

Prima di modificare a cavolo e rovinare tutto, preferisco chiedere. ;)

grazie
Alfredo
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da patel »

modifica nella sub Main la riga
oCurrRg = getCurrentRegion(ThisComponent.Sheets(0).GetCellRangeByName("A1"))
in
oCurrRg = getCurrentRegion(ThisComponent.Sheets(1).GetCellRangeByName("A1"))
-------------------
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
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da born2run »

Grazie Patel !!!!

Adesso funziona alla grande, cambiando quella riga che mi hai suggerito, crea un nuovo foglio che io ho chiamato Aggregato.
Li posso raccogliere il merge dei file e poi ordinare in ordine coronologico.

Allego il file a beneficio di tutti
Aggregatore v1.ods
(18.67 KiB) Scaricato 145 volte
Unica cosa che non riesco a fare è salvare SOLO il foglio Aggregato.
Ho fatto una macro che fa solo questo:

Codice: Seleziona tutto

Sub Salva_file

Dim oDoc as object
Dim oSheet as object
Dim oCell as object

Dim args(0) as new com.sun.star.beans.PropertyValue

 oDoc = ThisComponent
 oSheet = oDoc.Sheets.getbyname("Loader")
 oDoc.currentcontroller.activesheet = oSheet

 oCell = oSheet.getCellByposition(2,1)
cFile =  oCell.String

 oCell = oSheet.getCellByposition(3,1)
cFolder =  oCell.String

 cFile = Replace(cFile, " ", "_")

 ' args(0).Name = "FilterName"
 ' args(0).Value = "ods"
  oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".ods" ), args() )

End Sub
ma quando la eseguo (con il bottone Salva Aggregato) lui salva tutto il file(due fogli) e non solo quello unico che mi interessa.
Si può fare?

io punto al nome del file giusto con il comando

Codice: Seleziona tutto

 oCell = oSheet.getCellByposition(2,1)
ma forse non è sufficiente.

Dovrei forse aprire un altro doc temporaneo, metterci dentro lo sheet1 e poi salvare?
c'è una soluzione?
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da patel »

quando salvi salvi l'intero documento, quindi per salvare un solo foglio hai 2 alternative:
1) elimini i fogli non desiderati e salvi
2) crei un nuovo doc e ci copi il foglio voluto e poi salvi
per rimuovere un foglio:
oDoc.Sheets.removeByName("Loader")
-------------------
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
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da born2run »

patel ha scritto:quando salvi salvi l'intero documento, quindi per salvare un solo foglio hai 2 alternative:
1) elimini i fogli non desiderati e salvi
2) crei un nuovo doc e ci copi il foglio voluto e poi salvi
per rimuovere un foglio:
oDoc.Sheets.removeByName("Loader")
ok Patel, ho seguito il tuo consiglio e sono andato a ripescare una tua macro in altro post e la ho riadattata.
forse avrei potuto risolvere con meno comandi...

non capisco alcune cose di quella routine:
1) il ciclo che contollava i fogli per eliminarli aveva un vettore removeList che andava fuori dimensione massima. Siccome ho visto che un nuovo foglio veniva creato con 4 sheet, ho tagliato corto e ho eliminato solo gli ultimi tre.

2) ho implementato anche una routine che salva in csv

Anche se non capisco questo limite di OO che in od.s salva per forza tutti i file ed in csv riesce a salvarli singoli!

Allego il file finale a beneficio di tutti e metto risolto.
Aggregatore v1.ods
(20.85 KiB) Scaricato 143 volte
In caso di ulteriori dubbi, apro un altro post.

Patel grazie ancora del prezioso supporto!
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da patel »

non c'è bisogno di cercare macro già fatte basta rimuovere il foglio loader nella tua

Codice: Seleziona tutto

oDoc.Sheets.removeByName("Loader")
oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".ods" ), args() )
-------------------
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
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro che unisce ed ordina più file ods in un unico file

Messaggio da born2run »

patel ha scritto:non c'è bisogno di cercare macro già fatte basta rimuovere il foglio loader nella tua

Codice: Seleziona tutto

oDoc.Sheets.removeByName("Loader")
oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".ods" ), args() )
grazie
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
Rispondi