[Risolto] Macro per aprire ed unire file xls

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

[Risolto] Macro per aprire ed unire file xls

Messaggio da born2run »

Salve a tutti,

dopo aver risolto nel post (viewtopic.php?f=26&t=9907) l'unione di file .ods, vorrei risolvere anche questo nuovo problema:
come unire file in un formato pseudo xls (non ods), in un unico file.

In particolar modo questi file possono essere solo in questo formato .xls, e tra l'altro quando li apro mi danno un messaggio strano e vengono aperti in pseudo testo da excel (la prima colonna A non riconosce le date con gli orari e le successive non riconoscono i numeri con il punto e sono trattati come stringhe)

Allego a titolo di esempio due file del tipo ottenuto, e che devo aggregare:
DB orario 1.xls
(71.5 KiB) Scaricato 151 volte
DB orario 2.xls
(64.86 KiB) Scaricato 120 volte
Di questi file ne ho molti (centinaia) e sono molto lunghi (tantissime righe più di 8000) tanto che qui non me li accettava pe rle dimensioni eccessive (e ho dovuto ridurli da annuali a mensili).

Volendo fare questa aggregazione in maniera automatica con una macro, ho trasformato la macro già consigliata da Patel (sempre nel post sopra), creandone una seconda che allego.
Aggregatore orario v1.ods
(17.91 KiB) Scaricato 145 volte
In questa Macro ho modificato nella sub Mergefile l'estensione da .ods a.xls inq uesta riga:

Codice: Seleziona tutto

 sPattern = "*.xls"
Ho però ancora due problemi:
1) quando la macro unisce i file uno in coda all'altro sul foglio aggregatore, inserisce una riga bianca tra fine di un file e inizio del successivo. come si può levare?
Ho provato ad editare questa riga,

Codice: Seleziona tutto

adr.StartRow = adr.EndRow '+1
ma mantiene la riga...
Potrei forse ovviare cancellando le righe vuote...

Ma il vero problemaè il secondo:
2) quando la Macro copia i dati dei vari file di origine, sul foglio Aggregato unisce tutte le colonne in un'unica colonna, rendendo impossibile la divisione e la successiva gestione dei valori.

Girando sui forum..ho trovato che ci sono dei limiti di OO con i dialoghi di importazione dei file, risolvibili con i filtri, ma non saprei dove inserire il comando.

Spero che voi possiate aiutarmi a renderlo funzionante.

Grazie in anticipo!
Ultima modifica di born2run il venerdì 7 giugno 2019, 14:18, modificato 2 volte in totale.
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro per aprire ed unire file xls

Messaggio da born2run »

Studiando un po la documentazione sul parametro FilterProperties, riguardo il secondo problema ho trovato un workaround.

Ho inserito questo filtro trattando il file come csv(boh?)

Codice: Seleziona tutto

   mFileProperties(0).Name = "FilterName"
   mFileProperties(0).Value = "scalc: Text - txt - csv (StarCalc)"
   mFileProperties(1).Name = "FilterFlags"
   mFileProperties(1).Value = "44/32/9,,0,1,1/4/2/2/3/2/4/2/5/2/6/10/7/10/8/10/9/10/10/10/11/10/12/10/13/10/14/10/15/10/16/10/17/10"
il tutto è un po macchinoso..ma non sono riuscito a fare di meglio.
Adesso almeno riesco ad ottenere colonne distinte con valori numerici lavorabili in uscita

In più la routine Ordina porta tutte le righe vuote in alto...(e cancellandole potrei risolvere anche il primo problema).
Non è ancora quello che vorrei, ma è un buon risultato.
Aggregatore orario v2.ods
(99.38 KiB) Scaricato 131 volte
Non so se qualcuno ha soluzioni più eleganti.. ;)
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 per aprire ed unire file xls

Messaggio da patel »

per aprire un xlsx non c'è bisogno di workaround

Codice: Seleziona tutto

Sub aprixls 
Dim Documento  As Object, cella As Object, adresseDoc As String, Doc  As Object
Dim  dummy()
Doc = ThisComponent
'adresseDoc = ConvertToURL("/media/DATI/Documenti/Excelfile/ContoDeposito.ods") 
adresseDoc = ConvertToURL("F:\Download\esempio.xlsx")
Documento = StarDesktop.loadComponentFromURL(adresseDoc, "_default", 0, dummy() )
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
born2run
Messaggi: 12
Iscritto il: giovedì 30 maggio 2019, 19:23

Re: Macro per aprire ed unire file xls

Messaggio da born2run »

SIiPatel,
ma se utilizzo queste righe che tu mi dai, comunque importa tutte le colonne in una unica sul fiel aggregato.

Serve per forza filterOptions per dirgli di importarle separate e con 10 come valore per dirlgi che sono numeri.
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 per aprire ed unire file xls

Messaggio da patel »

questo ti succede se parti da file di testo come effettivamente sono i file che hai allegato, ma non con file excel.
Non basta cambiare l'estensione di un file di testo per farlo diventare un file excel
-------------------
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 per aprire ed unire file xls

Messaggio da born2run »

patel ha scritto:questo ti succede se parti da file di testo come effettivamente sono i file che hai allegato, ma non con file excel.
Non basta cambiare l'estensione di un file di testo per farlo diventare un file excel
figurati se lo vado a cambiare.. ;)
come ti dicevo i file escono cosi da questo programma come output..e anche se hanno formato pseudo excel , all'avvio mi mostrano un dialogo di non compatibilità. Quindi sicuramente hanno problemi.

Comunque ho risolto cosi..sembra funzionare con qel filtro.

Grazie
ciao
Alfredo
OpenOffice 4.1.6 su Windows 7
Rispondi