[Opgelost] Voorwaardelijke tekst op etiketten

Bespreek de tekstverwerker
HenryV
Berichten: 4
Lid geworden op: vr apr 09, 2010 10:56 am

[Opgelost] Voorwaardelijke tekst op etiketten

Bericht door HenryV »

Ik ben bezig met het maken van adresetiketten en dit gaat prima, maar er is nog wel iets waar ik niet uit kom:
- Ieder etiket bevat een vaste tekst (Aan de ouder(s)/verzorger(s) van). Deze tekst wordt keurig op ieder etiket geprint, maar ook op alle resterende lege etiketten van een blad. Is dit te voorkomen (bijvoorbeeld met voorwaardelijke tekst, alleen te printen als het db-veld <naam> is gevuld)?
- De adressering bestaat uit de velden <voorn> <voorv> <naam>, maar als een persoon geen voorvoegsel heeft dan worden hier een aantal extra spaties geprint. Kan dit ook opgelost worden met voorwaardelijke tekst, bijvoorbeeld <voorv> + spatie printen als <voorv> gevuld is?

Henry
Laatst gewijzigd door HenryV op vr apr 09, 2010 1:10 pm, 1 keer totaal gewijzigd.
OpenOffice 3.2 op Windows XP/Vista/7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Voorwaardelijke tekst op etiketten

Bericht door RPG »

Hallo

Ik denk dat hiet niet is op te lossen op de manier die je nu probeert namelijk tijdens het afdrukken van etiketten. Ik denk dat je het moet oplossen in je database. Als je het daar opgelost heb dan lever je de complete tabel af aan dat deel wat etiketten moet afdrukken.

Het voorgaande is weinig specifiek maar nu hoe ik een soortgelijk probleem heb opgelost in de HSQLDB database.

Code: Selecteer alles

SELECT  
-- Componeer een naam van de onderdelen
-- Eerst de Titel
-- is gelijk aan Vimooienaam
cast(
	casewhen ("Titel"  is not null  ,"Titel"||' ' , '' ) 
	|| "schr_vnaam" || ' '
	-- doe iets met een tussen deel
	|| Casewhen ("tussen" is not null ,"tussen" ||' ', '')  
	|| "schr_naamvol"  
	|| casewhen ("achter"  is not null  ,' ' || "achter" , '' ) 
as VARCHAR_IGNORECASE)
as "Naam"
 , 
"NAAMID"   
FROM "namen31" "namen31"
Een oplossing is meestal erg afhankelijk hoe de database is gemaakt maar ik denk dat je in grote lijnen mijn code kunt volgen.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
HenryV
Berichten: 4
Lid geworden op: vr apr 09, 2010 10:56 am

Re: Voorwaardelijke tekst op etiketten

Bericht door HenryV »

Bedankt voor de hint, inderdaad is de oplossing dit in de database (in dit geval een werkblad) aan te pakken. Door hier twee extra (verborgen) kolommen aan toe te voegen (eentje met de vaste tekst en eentje met de samengestelde naam) zijn beide problemen opgelost. Ik heb de samengestelde naam als volgt gemaakt: =TEKST.SAMENVOEGEN(C2; ALS(D2="";"";TEKST.SAMENVOEGEN(" ";D2)); " "; E2) waarbij C2 de voornaam is, D2 het voorvoegsel en E3 de achternaam.
OpenOffice 3.2 op Windows XP/Vista/7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: [Opgelost] Voorwaardelijke tekst op etiketten

Bericht door RPG »

Hallo

Het is mooi dat je snel een oplossing heb gevonden.

Ik wil desondanks even wijzen op een oplossing binnen OOo-base. Hier kun je vinden welke instructie in kunt gebruiken in een database gebaseerd op een spreadsheet.

Ik denk dat het volgende misschien ook kan helpen.

Code: Selecteer alles

Select 
  concat ('Aan de ouder(s)/verzorger(s) van',"voorn","voorv"," naam") as "Compleet"
  from "NamenLijst"

Code: Selecteer alles

 CONCAT(str1,str2,...)
Returns the string that results from concatenating the arguments. Returns NULL if any argument is NULL. May have more than 2 arguments. A numeric argument is converted to the equivalent string for
Op deze manier kun je meer handige queries maken zonder dat gelijk het spreadsheet onduidelijk wordt. Ik kan niet weten of dit ook een oplossing voor je kan zijn.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
HenryV
Berichten: 4
Lid geworden op: vr apr 09, 2010 10:56 am

Re: [Opgelost] Voorwaardelijke tekst op etiketten

Bericht door HenryV »

Het zou inderdaad een mooie oplossing zijn om dit in een query op te lossen, maar het werkt niet helemaal omdat, als het voorvoegsel niet is gevuld, deze voor de concat als null wordt gezien en er dus een lege string uit de concat komt.
Met if/then/else of een case is dit volgens mij ook niet op te lossen (althans ik zie 'm zo niet).

Henry
OpenOffice 3.2 op Windows XP/Vista/7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: [Opgelost] Voorwaardelijke tekst op etiketten

Bericht door RPG »

Hallo

Het is altijd woekeren met de mogelijkheden die er zijn. Als niet het gehele probleem is op te lossen met OOo-base dan misschien gedeeltelijk. Het was ook om er op te wijzen wat mogelijk is.

Het leren gebruikt te maken van queries kan misschien een basis zijn om later over stappen naar een database met meer mogelijkheden. Zolang een spreadsheet voldoet moet je niet overschakelen.

Ik heb lopen zoeken of ik een oplossing kon vinden en ik geloof dat ik iets heb wat goed kan werken.

Code: Selecteer alles

SELECT
 replace (concat("Voornaam" ,' ',
	 		insert("Voorvoegsel",length("Voorvoegsel")+1,1 ,' '), 
			"Naam"),
		'  ',' ') as "naam" 
FROM "Sheet1"
Het werkt misschien niet extreem snel maar meestal is dat niet het probleem. In de opzet die ik had was aleen de mogelijkheid dat het veld voorvoegsel een nul waarde kon zijn.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: [Opgelost] [Probleemoplosser] Samen voegen namen

Bericht door RPG »

Hello

Ik heb dit weekend nog wat meer gestudeerd op wat mogelijk is met een database gebaseerd op een spreadsheet. Natuurlijk biedt dit niet zoveel mogelijkheden maar bij een goed gebruik kan er toch wat mee gedaan worden. In een eerdere post heb ik een query getoond die ik gebruik in een HSQLDB database.
Nu heb ik twee queries als voorbeelden voor een database gebaseerd op een spreadsheet. Ik heb dit uitgetest op een lijst van 900 namen en het resultaat is snel genoeg.

Mijn inziens is een query overzichtelijker dan een functie in een spreadsheet. Ook kan er commentaar bijgezet worden. Dit maakt het beter te begrijpen als er na enige tijd op nieuw nagekeken moet worden. Het commentaar blijft alleen staan als er in Native mode gewerkt wordt.
In native mode kan er gemakkelijk met delen geplakt en of geknipt worden.

Tweede minder goede query

Code: Selecteer alles

SELECT  
-- Compositie van de naam met titels en nog meer zaken
ltrim(rtrim(replace(concat(
insert("Titel",length("Titel")+1,1 ,' '),
insert("schr_vnaam",length("schr_vnaam")+1,1,' '),
insert("schr_vnaam",length("schr_vnaam")+1,1,' '),
insert("tussen",length("tussen")+1,1,' '),
insert("schr_naamvol",length("schr_naamvol")+1,1,' '),
insert("achter",length("achter")+1,1,'')
),'  ',' '))) as "Naam",
"NAAMID"   
FROM "Namen"
Het nadeel van deze query is dat indien er drie spatie op een rij staan deze niet verminderd worden tot 1.




Derde betere query

Code: Selecteer alles

SELECT  
-- Compositie van de naam met titels en nog meer zaken
concat(
insert(concat("Titel",' '),0,0 ,''),
insert(concat("schr_vnaam",' '),0,0 ,''),
insert(concat("schr_vnaam",' '),0,0 ,''),
insert(concat("tussen",' '),0,0 ,''),
insert(concat("schr_naamvol",' '),0,0 ,''),
insert("achter",0,0 ,'')
) as "Naam",
"NAAMID"   
FROM "Namen" where "NAAMID" IN ( 3 )
Beiden queries zijn gebaseerd op de eerste in een vorige post. Ik denk dat de derde query beter is dan de tweede Het doel is dat de volledigenaam wordt weergegeven zonder overbodige spaties. De verklaring die nu volgt is van binnen uit.

concat("Titel",' ')
Hier in wordt de titel samengevoegd met een spatie. Indien het een NULL-waarde is dan is het resultaat ook NULL.

insert(concat("Titel",' '),0,0 ,'')
Er wordt een lege string toegevoegd aan het vorige resultaat. Als het een NULL waarde is dan krijg ik een lege string anders de waarde van de varibele "Titel" met een spatie. Dit idee wordt toegepast op alle overige waarden met uitzondering van de laatste want daar hoeft geen spatie te komen.

Concat(
Deze functie staat om alle delen die nu tenminste een lege string maken. Het resultaat is dat de namen gescheiden zijn door spaties.

Aanhalingstekens
Voor de duidelijk heid variablen worden omgegeven door dubbele aanhalings tekens. letterlijke waardes worden omgegeven door enkele aanhalings tekens. Dit maakt dat een lege string met twee enkele aanhalingsteken erg veel lijkt op een dubbel aanhallingsteken. Merk dat verschil goed op.
Legestring : ''
Dubbelaanhalingsteken : "

Ik hoop dan de uitleg niet alleen van belang is voor de oorspronkelijke vragen steller maar het is ook bedoeld voor andere lezers die met een zelfde soort probleem kampen.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
HenryV
Berichten: 4
Lid geworden op: vr apr 09, 2010 10:56 am

Re: [Opgelost] Voorwaardelijke tekst op etiketten

Bericht door HenryV »

Bedankt voor je uitgebreide antwoord. Inderdaad is een oplossing is SQL beter dan in de spreadsheet zelf. Ik heb je eerste query (van vrijdag) geprobeerd en deze werkt prima. De andere twee zien er ook goed uit maar heb ik nog niet getest. Hier kan ik in ieder geval het oorspronkelijke probleem mee tackelen.

Henry
OpenOffice 3.2 op Windows XP/Vista/7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: [Opgelost] Voorwaardelijke tekst op etiketten

Bericht door RPG »

Hallo

Ik gebruik deze draad nog wel eens om mijn eigen kennis op te frissen. Nu kan ik het ook gebruiken om nog wat extra informatie te geven. Belangrijk in OpenOffice is het samen spel van de verschillende onderdelen zoals hier getoond wordt: Spreadsheet, Database en eind-documenten. De query die eerder staat is voor de meeste mensen nog al moeilijk. Wanneer het resultaat alleen nodig is in teksten dan is een eenvoudiger oplossing ook mogelijk.

Maak een query en gebruik concact voor bijna elk veld behalve het laatste.
concat("VeldNaam",' ') as "Veld naam die je wilt zien".

De functie concat voegt alles samen behalve als er een leeg veld is. Bij een leeg veld wordt dat deel leeg. Dat wordt ook beoogd: geen spatie wanneer er geen voorvoegsel is bij een naam . Wanneer we een tekst document maken plaatsen we alle velden strak tegen elkaar in een document en de query zorgt voor de spaties.


Nadere uitleg.
Gezien kan worden dat steeds dat deel van de werkzaamheden gedaan wordt in dat programma wat dat het beste kan. Ook zien we dat het totaal eenvoudiger wordt. Neemt niet weg dat het vinden van al deze kleine zaken best tijd kost van iedereen. Dat is ook de reden dat ik het hier plaats.

Voorbeeld code.

Code: Selecteer alles

SELECT concat('Extra tekst indien gewenst') as "Extra",
		CONCAT( "Naam", ' ' ) "Naam",
		CONCAT( "voorvoegsel", ' ' ) "Voorvoegsel",
		"achternaam"
FROM "Sheet14"
Uit de link hier beneden schreef:CONCAT(str1,str2,...)
Returns the string that results from concatenating the arguments. Returns NULL if any argument is NULL. May have more than 2 arguments. A numeric argument is converted to the equivalent string form.
Alle functie die mogelijk zijn voor platte tabellen
http://www.openoffice.org/dba/specifica ... tions.html

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Plaats reactie