[Risolto] Macro che unisce più file ods in un unico file
[Risolto] Macro che unisce più file ods in un unico file
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) 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) Ho provato a fare questo secondo file seguendo alcuni post che ho già trovato in questo forum, ma non sono riuscito nel mio intento.
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.
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) 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) Ho provato a fare questo secondo file seguendo alcuni post che ho già trovato in questo forum, ma non sono riuscito nel mio intento.
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
Alfredo
OpenOffice 4.1.6 su Windows 7
Re: Macro che unisce ed ordina più file ods in un unico file
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
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
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: Macro che unisce ed ordina più file ods in un unico file
ciao Patel,
grazie innanzitutto dell'attenzione!
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.
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
e
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.
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.
che presumo sarebbero il formato giusto su cui lavorare con il file aggregatore del post senza avere problemi..
grazie
Alf
grazie innanzitutto dell'attenzione!
Il punto cruciale è proprio quello forse.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 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
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"
Codice: Seleziona tutto
args(0).Value = "Text - txt - csv (StarCalc)"
Guarda.. ti allego i due file di output che escono quando lancio la routine sopra:patel ha scritto:Passando al secondo argomento dovresti allegare un paio di file da caricare per provare la macro
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.
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
Alfredo
OpenOffice 4.1.6 su Windows 7
Re: Macro che unisce ed ordina più file ods in un unico file
è evidente che l'errore sta nella riga args(0).Value = "Text - txt - csv (StarCalc)"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() )
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
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: Macro che unisce ed ordina più file ods in un unico file
si infatti sto cercando di cambiarla.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.
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
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"
Nella seconda, quella per salvarlo in .ods
Ma come faccio a dirgli che deve restare .ods?
Non devo specificare nulla?
Patel se mi fai una macro per i file T. ti ringrazio....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ù
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
Alfredo
OpenOffice 4.1.6 su Windows 7
Re: Macro che unisce ed ordina più file ods in un unico file
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
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: Macro che unisce ed ordina più file ods in un unico file
per fare il merge dei file
nella cartella spath ci devono essere soltanto i file ods da copiare
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
-------------------
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: Macro che unisce ed ordina più file ods in un unico file
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
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
Alfredo
OpenOffice 4.1.6 su Windows 7
Re: Macro che unisce ed ordina più file ods in un unico file
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 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.
è questa?
Prima di modificare a cavolo e rovinare tutto, preferisco chiedere.
grazie
Alfredo
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 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
Prima di modificare a cavolo e rovinare tutto, preferisco chiedere.
grazie
Alfredo
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
Alfredo
OpenOffice 4.1.6 su Windows 7
Re: Macro che unisce ed ordina più file ods in un unico file
modifica nella sub Main la riga
oCurrRg = getCurrentRegion(ThisComponent.Sheets(0).GetCellRangeByName("A1"))
in
oCurrRg = getCurrentRegion(ThisComponent.Sheets(1).GetCellRangeByName("A1"))
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
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: Macro che unisce ed ordina più file ods in un unico file
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 Unica cosa che non riesco a fare è salvare SOLO il foglio Aggregato.
Ho fatto una macro che fa solo questo:
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
ma forse non è sufficiente.
Dovrei forse aprire un altro doc temporaneo, metterci dentro lo sheet1 e poi salvare?
c'è una soluzione?
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 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
Si può fare?
io punto al nome del file giusto con il comando
Codice: Seleziona tutto
oCell = oSheet.getCellByposition(2,1)
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
Alfredo
OpenOffice 4.1.6 su Windows 7
Re: Macro che unisce ed ordina più file ods in un unico file
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")
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
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: Macro che unisce ed ordina più file ods in un unico file
ok Patel, ho seguito il tuo consiglio e sono andato a ripescare una tua macro in altro post e la ho riadattata.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")
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. In caso di ulteriori dubbi, apro un altro post.
Patel grazie ancora del prezioso supporto!
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
Alfredo
OpenOffice 4.1.6 su Windows 7
Re: Macro che unisce ed ordina più file ods in un unico file
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
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: Macro che unisce ed ordina più file ods in un unico file
graziepatel ha scritto:non c'è bisogno di cercare macro già fatte basta rimuovere il foglio loader nella tuaCodice: Seleziona tutto
oDoc.Sheets.removeByName("Loader") oDoc.StoreToURL( ConvertToUrl( cFolder + cFile + ".ods" ), args() )
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
Alfredo
OpenOffice 4.1.6 su Windows 7