Cell concatenation (Calc)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

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.

Vier keer een dubbel aanhalingsteken, is de escape-code om een dubbel aanhalingsteken als string te genereren

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"
Tab in een cel: Je ziet het niet in Calc, maar het verschijnt wel in de editor na kopiëren

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.

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: Het IF-statement voegt deze (plus tabs) toe, als er inderdaad commentaar is.

Zie ook

Bronnen