TextToColumns

LeoDeWeerdt
Berichten: 41
Lid geworden op: wo jan 06, 2010 4:26 pm

TextToColumns

Bericht door LeoDeWeerdt »

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

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 gewijzigd door floris v op za jan 25, 2014 1:03 pm, 1 keer totaal gewijzigd.
Reden: Code-tags toegevoegd
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: TextToColumns

Bericht door RPG »

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 7.4.3.2 op openSUSE Leap 15.4
LeoDeWeerdt
Berichten: 41
Lid geworden op: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Bericht door LeoDeWeerdt »

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

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.
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: TextToColumns

Bericht door RPG »

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 7.4.3.2 op openSUSE Leap 15.4
LeoDeWeerdt
Berichten: 41
Lid geworden op: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Bericht door LeoDeWeerdt »

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.
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: TextToColumns

Bericht door RPG »

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 7.4.3.2 op openSUSE Leap 15.4
LeoDeWeerdt
Berichten: 41
Lid geworden op: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Bericht door LeoDeWeerdt »

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.
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: TextToColumns

Bericht door RPG »

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) 262 keer gedownload
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
LeoDeWeerdt
Berichten: 41
Lid geworden op: wo jan 06, 2010 4:26 pm

Re: TextToColumns

Bericht door LeoDeWeerdt »

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.
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: TextToColumns

Bericht door RPG »

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 7.4.3.2 op openSUSE Leap 15.4
LeoDeWeerdt
Berichten: 41
Lid geworden op: wo jan 06, 2010 4:26 pm

Re: TextToColumns OPGELOST

Bericht door LeoDeWeerdt »

Grasduinend op verschillende OOO fora heb ik een oplossing voor mijn probleem gevonden.
Hieronder de gebruikte code.

Code: Selecteer alles

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.
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: TextToColumns

Bericht door RPG »

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 7.4.3.2 op openSUSE Leap 15.4
Plaats reactie