Spalten löschen, wenn kein Eintrag in irgendeiner Zeile

Hallo Team,

habe ich Tomaten auf den Augen - ich finde keine simple Lösung für o.a. Problem. Hintergrund: Ich habe einen Mapper mit x Spalten, der in einen Datastore soll. Allerdings will ich den nicht vollhauen mit Spalten, die ohnehin keinen Inhalt haben (z.B. Positionszeilen aus einem Mapper mit Orderdaten brauchen die ganzen Adreßangaben der Headerzeile nicht). Ich dachte, ich kann das locker mit Columnremover machen und dabei angeben, daß er alles rausschmeißen soll, was keinen Inhalt hat - scheint aber nicht zu gehen. Und Columnrenamer vorzuschalten, um diese Spalten mit RAUS_ zu präfixen, wenn sie komplett leer sind, und danach den Remover auf RAUS_* anzuwenden, scheint auch nicht zu gehen, da mir eine Variable für „Spalte ist leer“ fehlt. Wie kann ich das denn machen? Wie gesagt, vermutlich ist es viel einfacher, ich komme aber nicht drauf.
Anmerkung: Ich würde den anschließenden DatastoreWriter dann so konfigurieren, daß er das Schema erweitern darf. Dann würde ich den Fall erschlagen, daß ggf. noch neue Spalten hinzukommen in einem späteren Run.

Gruß Micha
podcomm e-commerce management

Guten Abend Micha,

mit dem Skript hier kriegst du alle Spalten raus, die gefüllt sind.

<#assign list_of_columns = []>
<#list spreadsheet@SpreadsheetCSVReader_5.getRows() as row>
 <#list row.getCols() as col>
    <#if col.get() != "" && !list_of_columns?seq_contains(col.title!)>
      <#assign list_of_columns = list_of_columns + [col.title!]>
    </#if>
 </#list>
</#list>
${list_of_columns?join(",")}

Das ganze am besten in eine TextHTMLWriter packen. Den HTMLWriter kannst du dann in einem ColumnRemover im „Include columns“-Modus als Spaltenauswahl benutzen.

Hier ein kleines Projektbeispiel zum Rumspielen:
FlowExport-Test_Generic-AutoRemoveEmptyColumns.json (5,7 KB)

Gruß
Gustav

1 Like

Hallo Gustav,

clever, danke! Ist eigentlich ein bißchen schade, daß man es so umschiffen muß, indem man jede Zelle auf Inhalt abfragt und nur bei Treffer die Spalte ins Array schreibt. Vielleicht kann Synesty ja eine Logik in einen der Column-Steps aufnehmen, so daß man das mit Freemarker einfacher lösen kann?

Aber coole Lösung!

Gruß Micha

1 Like