[Snippet] Spaltentitel von einem Spreadsheet als Sequenz

Und weiter geht's. Hiermit kann man die Spaltentitel eines Spreadsheets abfragen und kriegt diese als Sequenz zurück. Der ist sehr hilfreich, wenn man die Spaltentitel haben möchte, aber nicht über das ganze Spreadsheet iterieren will.


Das ganze ist zwar nur ein Einzeiler, aber als Snippet erspart er mir das Überlegen/Suchen, wie ich es beim letzten Mal gelöst hatte.


Beispiel: myFunc(spreadsheet@SpreadsheetMapper_1) -> [col0_title, col1_title, ...]

<#return SSM.header?keep_after("[")?keep_before_last("]")?split(", ") />

Das sollte auf allen Spreadsheets funktionieren, als auch mit dem Output von ReadDatastore/Filtern etc., muss nicht notwendigerweise ein Spreadsheetmapper sein. Dafür lege ich aber nicht meine Hand ins, getestet habe ich es nur mit dem Mapper.

Danke für deine ersten Snippets. Kleiner Verbesserungsvorschlag von den Insidern:


<#return SSM.header.cols />


header.cols gibt dir direkt schon eine Liste (Sequence im Freemarker Jargon). Das spart dir das String-Zerpflücken.


Ein weiteres Anwendungsbeispiel was man dann damit machen kann wäre z.B.:


  • ${my.myFunc(spreadsheet@SearchMasterDatastore_1)?join(";")} - listet alle Spaltentitel Semikolon-getrennt auf
  • ${my.myFunc(spreadsheet@SearchMasterDatastore_1)?filter(headercol -> headercol.title?starts_with("price_"))?join(";")} - listet alle Spaltentitel auf, die mit "price_" beginnen
  • <#if my.myFunc(spreadsheet@SearchMasterDatastore_1)?seq_contains("description")>Ja Spalte "description" ist enthalten<#else>Nein, nicht gefunden</#if>

Nur zur Info: Das benutzte ?filter Built-in ist noch recht neu in Freemarker. In Kombination mit ?map kann man da tolle Dinge in sehr kompakter Schreibweise machen.


Edit: Wir haben .getHeader().getCols() bzw. .header.cols mal in den Spreadsheet-Funktionen im Handbuch ergänzt.

Das ist ja noch kürzer!

Und ich war schon glücklich, als ich beim Rumprobieren .header gefunden hatte.

Ich meine auch, dass ich mal .cols getestet habe. Vielleicht aber mit großem C, oder ich habe ein Fragezeichen statt Punkt benutzt.