TextToColumns

TextToColumns

Berichtdoor LeoDeWeerdt » do jul 11, 2013 3:57 pm

In een Calc blad wens ik enkele tekstlijnen ( bv in C4:C14: dit is een test, test, test, test, test) op een vaste positie (17) in 2 kolommen te splitsen. Deze actie heb ik opgenomen met de macrorecorder. Dat werkt perfect echter met een opmerking. Het "TextToColumns" rooster verschijnt, waarin ik "Fixed Width" aankruis en de positie voor de splitsing (17) invul. OK drukken en het resultaat verschijnt.
Tot zover alles in orde. Mijn vraag is nu "Hoe kan ik de "Fixed Width" en de splitsing positie (17) ingeven zodat de macro doorloopt tot het einde zonder tussenkomst mijnerzijds."

Code: Selecteer alles   UitklappenInklappen
sub oParseRange
dim document   as object, dispatcher as object
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args2(0) as new com.sun.star.beans.PropertyValue
   args2(0).Name = "ToPoint"
   args2(0).Value = "$C$7:$C$14"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
   dispatcher.executeDispatch(document, ".uno:TextToColumns", "", 0, Array())
end sub
Laatst bijgewerkt door floris v op za jan 25, 2014 1:03 pm, in totaal 1 keer bewerkt.
Reden: Code-tags toegevoegd
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Berichtdoor RPG » do jul 11, 2013 7:23 pm

Hallo

Dit lijkt mij een situatie die je niet moet willen. Of met andere woorden: Probeer een andere manier van oplossen te vinden voor het huidige probleem. Door in een vroeg stadium de gegevens anders te presenteren kan het mogelijk op een andere manier gedaan worden.

Ik neem aan dat je bekend bent met de tekst functies van OOo-calc

Romke
LibreOffice 6.1.6.3 op openSUSE Leap 15
RPG
 
Berichten: 3951
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: TextToColumns

Berichtdoor LeoDeWeerdt » do jan 23, 2014 6:54 pm

Ik heb inderdaad het probleem kunnen omzeilen door het toepassen van "findandreplace"
Een nieuw probleem echter is dat (in de oefening hieronder) de karakters A, B en C [args1(10) .Value] niet voor
iedere lijn dezelfde zijn. De totale lengte van de te vervangen string is wel altijd dezelfde (32 karakters)
m.a.w. Is het mogelijk bij het begin van iedere gevonden lijn het overeenkomende
aantal (32) karakters i.p.v. de gevonden string te verwijderen.
In het voorbeeld betreft het de calc cellen ("I8:I14")

Code: Selecteer alles   UitklappenInklappen
sub findReplaceDraft
dim oSheet13 as object
   oSheet13 = ThisComponent.Sheets.GetByName("Sheet13")   
   ThisComponent.CurrentController.select oSheet13.getCellRangeByName("I8:I14")
dim odocument as object, odispatcher as object
dim args1(17) as new com.sun.star.beans.PropertyValue
   odocument   = ThisComponent.CurrentController.Frame
   odispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   args1(0).Name = "SearchItem.StyleFamily"
   args1(0).Value = 2
   args1(1).Name = "SearchItem.CellType"
   args1(1).Value = 0   
   args1(2).Name = "SearchItem.RowDirection"
   args1(2).Value = true
   args1(8).Name = "SearchItem.AlgorithmType"
   args1(8).Value = 0
   args1(9).Name = "SearchItem.SearchFlags"
   args1(9).Value = 65536
   args1(10).Name = "SearchItem.SearchString"
   args1(10).Value = "AAA BBBBB 6703 0411 2358 0368 C "
   args1(11).Name = "SearchItem.ReplaceString"
   args1(11).Value = ""
   args1(12).Name = "SearchItem.Locale"
   args1(12).Value = 255
   args1(13).Name = "SearchItem.ChangedChars"
   args1(13).Value = 2
   args1(14).Name = "SearchItem.DeletedChars"
   args1(14).Value = 2
   args1(15).Name = "SearchItem.InsertedChars"
   args1(15).Value = 2
   args1(16).Name = "SearchItem.TransliterateFlags"
   args1(16).Value = 1280
   args1(17).Name = "SearchItem.Command"
   args1(17).Value = 3
   odispatcher.executeDispatch(odocument, ".uno:ExecuteSearch", "", 0, args1())
End Sub
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Berichtdoor RPG » do jan 23, 2014 8:08 pm

Hallo

Is er gebruik gemaakt van de regular expressions?

Ik kan het niet zien in de code maar de mode kan best gezet zijn.

En is het mogelijk dat er eventueel in een klein voorbeeld duidelijk gemaakt wordt wat de bedoeling is?

Waarom kan er geen gebruik gemaakt worden van de textfuncties?

Romke
LibreOffice 6.1.6.3 op openSUSE Leap 15
RPG
 
Berichten: 3951
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: TextToColumns

Berichtdoor LeoDeWeerdt » vr jan 24, 2014 2:56 pm

RPG, We praten hier wel over een macro voor een Spreadsheet (calc).
Om u het testen mogelijk te maken heb ik hieronder de tekst ingevoerd voor het betreffende CALC bereik (I8:I14).
    AAA BBBBB 6703 0411 2358 0368 C AAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAA BBBBB 6703 0411 2358 0368 C BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
    AAA BBBBB 6703 0411 2358 0368 C CCCCCCCCCCCCCCCCCCCCCCC
    AAA BBBBB 6703 0411 2358 0368 C DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
    AAA BBBBB 6703 0411 2358 0368 C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    AAA BBBBB 6703 0411 2358 0368 C GGGGGGGGGGGGGGGGGG
    AAA BBBBB 6703 0411 2358 0368 C HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Berichtdoor RPG » vr jan 24, 2014 5:01 pm

Hallo

Het spijt mij maar dat is geen antwoord op mijn bijdrage/vraag.

Waarom wordt er niet gebruikt gemaakt van de functie left en Right. De ene geeft het linker deel van een cel en de ander het rechter.

Romke
LibreOffice 6.1.6.3 op openSUSE Leap 15
RPG
 
Berichten: 3951
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: TextToColumns

Berichtdoor LeoDeWeerdt » vr jan 24, 2014 7:22 pm

RPG
Kunt u mij, aan de hand van een voorbeeld, iets meer uitleg geven hoe de funktie left en right te gebruiken
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Berichtdoor RPG » vr jan 24, 2014 10:45 pm

Hallo

Ik denk dat je dat het best in de help file kunt gaan lezen.

open een werkblad
Druk op de F1 toets
Type Links/Left of Rechts/right in wanneer je het index tablad geactiveerd hebt.
Klik daarna op de gewenste functie naam.

Romke
Bijlagen
voorbeeldLR.ods
(6.97 KiB) 81 keer gedownload
LibreOffice 6.1.6.3 op openSUSE Leap 15
RPG
 
Berichten: 3951
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: TextToColumns

Berichtdoor LeoDeWeerdt » za jan 25, 2014 12:02 am

RPG,
Uw suggestie gebruik ik regelmatig, maar hoe die bevindingen daar in een macro te verwerken is mij niet duidelijk.
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Berichtdoor RPG » za jan 25, 2014 12:31 am

Hallo
LeoDeWeerdt schreef:Uw suggestie gebruik ik regelmatig, maar hoe die bevindingen daar in een macro te verwerken is mij niet duidelijk.
Het was en is mijn bedoeling om macros te vermijden.

Als je aan een macro wilt vast houden dan moet je waarschijnlijk dat doen door middel van een for next loop of voor elke cel een macro maken.

Dan wordt het denk ik langzaam en waarschijnlijk ook complex. Je kunt ook met echte zelf geschreven macro's gaan werken. Dat is in ieder geval moeilijk maar mogelijk niet langzaam.

Ik heb geen andere ideeën.

Romke
LibreOffice 6.1.6.3 op openSUSE Leap 15
RPG
 
Berichten: 3951
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: TextToColumns OPGELOST

Berichtdoor LeoDeWeerdt » vr jan 31, 2014 2:08 pm

Grasduinend op verschillende OOO fora heb ik een oplossing voor mijn probleem gevonden.
Hieronder de gebruikte code.
Code: Selecteer alles   UitklappenInklappen
Sub SearchReplace

Dim oDoc As Object, oSheet As Object
Dim oReplace As Object         'Replace Descriptor (ScCellSearchObj)
Dim lNumReplace As Long

oDoc = ThisComponent
oSheet = oDoc.Sheets.getByIndex(Bladnummer)
oReplace = oSheet.createReplaceDescriptor()
oReplace.SearchByRow = True
oReplace.SearchString = "Te vervangen tekst" 
oReplace.ReplaceString = "Nieuwe tekst"
INumReplace = oSheet.replaceAll(oReplace)
End Sub
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Berichtdoor RPG » vr jan 31, 2014 4:09 pm

Hallo

Het is mooi dat je het gevonden hebt. Wanneer je echt met macro's wilt gaan werken dan moet je gaan zoeken op de Engelstalige forums.

Macro's hebben een wat andere manier van het oplossen van problemen. De manier van denken die je hebt voor OOo calc past niet zo direct bij macro's. Aan de andere kant wanneer je macro's goed begrijpt dan kan het soms ook snel werken.

Ik heb nog wel gezocht of ik iets kan vinden wat gemakkelijk werkt maar dat wilde niet. Ik heb geprobeerd iets met Regular exprssion te doen. Sinds OOo3.4 is daar wat in veranderd. En als ik het goed begrepen heb is er ook nog een verschil tussen Apache Office en Libre Office. Dat alles maakt het op dit moment niet duidelijk.

Ik begrijp wel enigszins de macros die nodig zijn voor een database formulier. Ik werk bijna nooit met OOo-calc of met de andere onderdelen. Macro's daar ken ik bijna niet. Het is mooi dat je geslaagd bent.

Romke
LibreOffice 6.1.6.3 op openSUSE Leap 15
RPG
 
Berichten: 3951
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland


Keer terug naar Macro's

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast