Cell concatenation (Calc)
Hoe voeg je inhoud van verschillende cellen samen, al of niet in combinatie met vaste tekst? Ik ken de basis, bv. ="blub"&A2&B2
maar daarna wordt het soms complexer dan verwacht. Komt-ie:
Context:
- Dit betreft gebruik via de user interface van LibreOffice of Apache OpenOffice. Dus als je 'gewoon' met een rekenblad werkt. Dit gaat niet over programmeren of macro's
- Aanleiding voor dit artikel: In juni 2022 ben ik bezig met het automatisch vertalen van een website. Het gaat vooral om de vertaling van losse termen. Die wil ik in een rekenblad bijhouden, met helemaal aan de rechterkant een kolom waarin kant-en-klare Bash-code wordt gegenereerd. Die code kopiëer-en-plak ik vervolgens naar een Bash-script.
Quotes met dubbele aanhalingstekens
In tegenstelling tot diverse programmeertalen, zijn "
en '
niet inwisselbaar. Je moet "
gebruiken om strings (=vaste tekst) te quoten om ze te incorporeren:
='blub'&A2&B2 # Geeft foutmelding #NAME? ="blub"&A2&B2 # OK
Concatenate met &
Samenvoegen van elementen in een string, gaat met &
. Je kunt hier geen +
voor gebruiken:
="blub"+"blub" # Foutmelding: #VALUE! ="blub"+a2 # Foutmelding: #VALUE! =a2+a2 # Foutmelding: #VALUE! (cellen bevatten geen getallen)
Dubbele aanhalingstekens incorporeren
Dubbele aanhalingstekens worden gebruikt om strings (literals?) te quoten. Maar wat te doen als ik toch per se een dubbel aanhalingsteken wil incorporeren? Dat kan op verschillende manieren:
Escapen met 4 aanhalingstekens
Ah, een nieuw nivo in escapen: Als je vier keer een " schrijft, krijg je 'm als karakter. Bv.:
=""""&C2&""""
Dit lijkt overkill, maar lijkt intuïtiever dan gebruik char-functie.
Char-functie
De functie =char(34)
produceert een dubbel aanhalingsteken. En zo produceer je hetzelfde resultaat als in de afbeelding hierboven:
=char(34)&c2&char(34)
Tab incorporeren
Enkele cel
Je kunt een tab incorporeren in een cel middels char(9)
. De truuk is echter, dat je die tab niet ziet in Calc, maar wél als je de betreffende cel kopiëert naar (in mijn geval) Sublime. Voorbeeld:
="blub&char(9)&"blub"
Overigens, tab escapen middels "\t"
, bv. =a2&"\t"&c2
, lijkt niet te werken.
Meerdere cellen
Als ik meerder cellen selecteer (bv. 2 cellen) met daarin tabs, en deze plak in Sublime, worden de tabs geconverteerd naar enkele spaties.
- Een extra kolom toevoegen, waarin alleen de inhoud van de vorige kolom wordt overgenomen (en niet de formules), maakt geen verschil
- Bestand wegschrijven als .csv-bestand, maakt geen verschil bij openen in Sublime Editor, maar wél als het bestand open in VIm???
- Online kon ik nix vinden (bv. https://www.google.com/search?q=export+from+%22calc%22+keep+tab+characters)
Conclusie: Laat het los - Niet belangrijk.
Complex voorbeeld: Vertaalsheet
- Kolom A:
=len(kolom b)
- Kolom B: Org (oorspronkelijke string)
- Kolom C: Dst (vertaling)
- Kolom D: Commentaar
- Kolom E: Scheidingskolom
- Kolom F: Formule waarmee de uiteindelijke programmeercode wordt gevormd.
Formule in kolom F:
="((i++)); tr_in[$i,1]="&""""&B161&"""" & CHAR(9)&CHAR(9)&"tr_in[$i,2]=" & """" &C161 & """"&IF(D161=""; ""; CHAR(9)&CHAR(9)&"#"&D161)
Opmerkingen:
- Dubbele aanhalingstekens worden ingevoerd middels
&""""&
, dus gescheiden door ampersand-tekens. Dat werkt behoorlijk intuïtief - De tabs worden soms wel getoond in Calc: Als text wrapped naar de volgende regel
- De commentaren in kolom
D
worden zonder voorafgaande#
geschreven: HetIF
-statement voegt deze (plus tabs) toe, als er inderdaad commentaar is.