Pagina 1 di 1
[Risolto]Macro raggruppa separatori di campo
Inviato: giovedì 15 settembre 2016, 15:08
da XLUPOGRIGIOX
Ciao a tutti,come da titolo vorrei sapere se esiste una macro per simulare l'operazione Dati->Testo a colonna->e flaggare sia spazio che raggruppa separatori di campo.
Allego file per prove.
Ringrazio tutti sin d'ora per l'aiuto
Re: Macro raggruppa separatori di campo
Inviato: giovedì 15 settembre 2016, 17:45
da unlucky83
Scusami, ma a me sembra, dal tuo esempio, che sia più opportuno separare a larghezza fissa. I dati originali sono salvati in un file di testo?
Re: Macro raggruppa separatori di campo
Inviato: giovedì 15 settembre 2016, 18:50
da XLUPOGRIGIOX
Ciao Unlucky,si in effetti con l'eseguibile pdftotxt esporto un pdf in txt e poi lo importo in calc,fatto ciò costruirò una macro per importare solo i dati che mi servono,ma essendoci troppe celle vuote in ogni riga tra una cella con un termine ed un'altra,provando manualmente raggruppa separatori di campo mi elimina le celle vuote e mi diventa più "lavorabile" come nel file che ho allegato
Re: Macro raggruppa separatori di campo
Inviato: giovedì 15 settembre 2016, 19:04
da unlucky83
Capito. Dalla macro presente nel file vedo che importi il file con il filtro, immagino per ottenere la prima tabella "com'è", forse basta modificare i flag di quel filtro e così con una sola macro fai tutto.
Re: Macro raggruppa separatori di campo
Inviato: giovedì 15 settembre 2016, 19:33
da XLUPOGRIGIOX
Certo,io purtroppo non so come impostare i filtri da macro.Proviamo,magari così si risolve tutto molto più velocemente
Re: Macro raggruppa separatori di campo
Inviato: giovedì 15 settembre 2016, 21:05
da unlucky83
Codice: Seleziona tutto
REM ***** BASIC *****
Sub import2_sample
Dim mFileProperties(1) As New com.sun.star.beans.PropertyValue
Dim sUrl As String
myarray()=ChooseFiles()
sUrl=myarray(0)
mFileProperties(0).Name = "FilterName"
mFileProperties(0).Value = "Text - txt - csv (StarCalc)"
mFileProperties(1).Name = "FilterFlags"
'mFileProperties(1).Value = "32/MRG,SYSTEM,1,1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1"
oDesktop = createUNOService("com.sun.star.frame.Desktop")
if sUrl="" then
exit sub
end if
oDocument = oDesktop.loadComponentFromURL(sUrl,_
"_blank",0,mFileProperties())
mFileProperties(1).Value = "FIX,,SYSTEM,1,0/1/5/1/19/1/28/1/73/1/85/9/92/1/104/1/116/1/127/1"
oDocument = oDesktop.loadComponentFromURL(sUrl,_
"_blank",0,mFileProperties())
End Sub
Function ChooseFiles()
Dim oDialog As Object
Dim s As String
oDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oDialog.setDisplayDirectory(GetWorkDir())
oDialog.setMultiSelectionMode(FALSE)
' Xray oDialog
If oDialog.Execute() = 1 Then
ChooseFiles= oDialog.getFiles()
End If
End Function
La prima macro se eseguita, apre due nuovi file di calc con il txt importato. La seconda macro serve per selezionare il txt da importare (cioè l'allegato txt).
Codice: Seleziona tutto
'mFileProperties(1).Value = "32/MRG,SYSTEM,1,1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1"
32 sta per spazio ed è l'unico separatore impostato; /MRG sta per merge, quindi i separatori raggruppati;
SYSTEM sta per l'impostazioni di sistema per il separatore dei decimali, il primo 1 sta ad indicare che deve essere letto il txt dal primo rigo.
il secondo 1 e tutti i gli alterni stanno ad indicare la prima colonna del txt, intesa come carattere
gli 1 in mezzo stanno ad indicare il flag sulla colonna importata e indicano il formato standard.
Codice: Seleziona tutto
mFileProperties(1).Value = "FIX,,SYSTEM,1,0/1/5/1/19/1/28/1/73/1/85/9/92/1/104/1/116/1/127/1"
Fix sta per larghezza fissa, dopo system la logica dei numeri è come sopra, da notare 85/9/91, il campo da 85 a 90 viene ignorato perchè ho scelto il formato 9. per maggiori dettagli leggere pag 42 di questo tutorial:
https://www.openoffice.org/api/basic/ma ... torial.pdf
Re: Macro raggruppa separatori di campo
Inviato: venerdì 16 settembre 2016, 21:42
da XLUPOGRIGIOX
Ciao Unlucky,la macro da te proposta funziona alla grande!!!
Ti ringrazio per l'aiuto,una cosa,come mai l'url del file lo hai definito con myArray?
Re: Macro raggruppa separatori di campo
Inviato: venerdì 16 settembre 2016, 21:54
da unlucky83
Perchè ChooseFiles() è una funzione che fornisce come output un array. Con una piccola modifica nel suo codice infatti consente la selezione multipla di più file. L'ho modificata per restituire un solo valore, ma questo viene salvato in un array con dimensione 1. Era una macro che avevo già pronta e che ho solo adattato al tuo caso apportando il minor numero di modifiche. Avrei potuto impostare l'output della funzione come stringa e quindi scrivere direttamente sUrl=ChooseFiles() (a quel punto gli avrei cambiato anche il nome in ChooseFile() )
Siccome sUrl deve essere una stringa, ho successivamente messo sUrl=myarray(0)
Se vuoi un'importazione più specifica, puoi applicare i codici di formato a ciascuna colonna. Ho applicato solo lo standard (1) e il nascosto (9)
Re: Macro raggruppa separatori di campo
Inviato: venerdì 16 settembre 2016, 22:31
da XLUPOGRIGIOX
Ok capito,per comodità ho impostato sUrl con il nome di un file specifico,ma devo ammettere che scegliere il file non è per niente una cattiva idea,potrei metterlo come opzione se non trova il file da importare

Per il resto è perfetto,per ora grazie e nel caso dovessi modificare qualcosa se il txt è diverso per cliente,chiederò di nuovo il tuo aiuto
