Im Blog-Artikel Word Clouds im Büro zeige ich, wie man datentechnische sichere Word Clouds, mit Fokus einer Nutzung im Büro erstellt. Das Tool basiert auf JavaScript mit der Bibliothek D3.js. Es erzeugt Word Clouds als SVG-Dateien. Diese Grafikdateien lassen sich mit den neusten Microsoft Office Programmen öffnen und weiterbearbeiten.
Steht Ihnen nur eine ältere Office Version zur Verfügung geht das leider nicht.
Es bleibt Ihnen die Möglichkeit, die Word Cloud als Bild einzufügen. Das ist ganz okay. Wenn Sie aber mit Excel, Word oder PowerPoint Funktionen auf einzelne Wörter zugreifen und diese formatieren oder animieren können, entstehen neue Möglichkeiten.
Die Basis ist Excel
Visual Basic for Applications ändert das. VBA wird von allen Office Anwendungen unterstützt. Eine Umwandlungsfunktion ist damit grundsätzlich auch in jeder Office Anwendung möglich. Aber die Daten der Word Cloud liegen als Tabelle vor, deswegen habe ich mich für Excel entschieden.
Das Tool besteht aus drei Teilen
Die Excel-Datei mit dem Tool besteht aus zwei Tabellenblättern. In der Tabelle List befindet sich die datentechnische Abbildung der Word Cloud.
In jedem weiteren Arbeitsblatt kann eine Word Cloud als Grafik generiert werden. Der Name des Tabellenblatts spielt keine Rolle. Die Wolke wird immer auf dem Arbeitsblatt eingefügt, von dem aus der Makro WordCloudInsert() aufgerufen wird. Ich habe das erste Arbeitsblatt trotzdem Word Cloud genannt.
Der dritte Teil, neben den beiden Tabellenblättern, besteht aus dem VBA-Modul. Die enthaltenen Funktionen berechnen aufgrund der Tabelle List die Position der Shapes und fügen diese in das Arbeitsblatt Word Cloud als Grafik ein.
Die Tabelle List befüllen
In der Tabelle List befinden sich alle Wörter der Word Cloud. Jede Zeile enthält die Daten eines Wortes.
Der Aufbau darf auch nicht verändert werden. Die VBA Routinen greifen auf definierte Spalte zu.
Ursprung der Word Cloud ist die lokale HTML-Datei aus dem obigen Artikel. Damit wird sie über die Bibliothek d3.js generiert und formatiert. Dort gibt es auch einen Button (1), der die List-Felder entsprechend ihrem notwendigen Aufbau erzeugt und in ein Textfeld kopiert (2).
Die Liste (2) wird über die Zwischenablage kopiert und in dieses Excel-Arbeitsblatt eingefügt. Im ersten Moment befinden sich noch alle Daten in der ersten Spalte. Damit das sich ändert, müssen Sie in der Ribbon-Leiste unter DATEN die Funktion Text in Spalten aufrufen. Sobald Sie als Trennzeichen ein Komma eingestellt haben, kopiert Excel alle Daten an die richtigen Stellen. Wenn Sie eine bereits bestehende Word Cloud Tabelle überschreiben, meldet Excel, dass dort bereits Daten stehen.
Die einzige Eingabe, die Sie als Anwender machen müssen, ist eine Breite und Höhe des SVG-Bildes einzutragen (3). Es sind die gleichen Werte, die Sie auch in der HTML-Datei gewählt haben.
Wie funktionieren die VBA-Funktionen?
Wirklich relevant ist nur eine Funktion: WordcloudInsert(). Über diese Funktion werden alle notwendigen Aktionen ausgelöst. Zuerst wird eine bereits vorhandene Word Cloud auf dem aktiven Arbeitsblatt gelöscht.
Dann werden die einzelnen Parameter Wort für Wort aus der Tabelle List eingelesen und als Shape in das aktuelle Arbeitsblatt eingefügt.
Was genau passiert, sehen Sie in den Kommentaren im Listing.
Option Explicit 'Word Cloud auf dem aktuellen Blatt einfügen 'Tabelle "List" muss vorhanden sein und Word Cloud Daten enthalten Sub WordcloudInsert() Dim r As Integer Dim word As String Dim wfont As String Dim wsize As Integer Dim wx As Double Dim wy As Double Dim wwidth As Double Dim wheight As Double Dim wrotation As Double Dim wcolor As Long 'Zuerst eine bestehende Word Cloud löschen Call WordcloudRemove 'Beginn der Kopfzeile in Zeile 1 r = 1 Do r = r + 1 'Inhalte der Felder je Wort auslesen word = Sheets("List").Cells(r, 1) wfont = Sheets("List").Cells(r, 2) wsize = Sheets("List").Cells(r, 3) 'zum x-Wert die Breite des Bildes addieren wx = Sheets("List").Cells(r, 4) + Sheets("List").Cells(1, 11) 'zum y-Wert die Höhe des Bilder addieren wy = Sheets("List").Cells(r, 5) + Sheets("List").Cells(1, 13) wwidth = Sheets("List").Cells(r, 6) wheight = Sheets("List").Cells(r, 7) wrotation = Sheets("List").Cells(r, 8) wcolor = Sheets("List").Cells(r, 9) If word <> "" Then 'Die Position wird über die Wortmitte berechnet, deshalb die halbe Breite für x und die halbe Höhe für y abziehen wx = wx - wwidth / 2 wy = wy - wheight / 2 'Neues Shape als Textbox mit den x,y Koordinaten und Breite und Höhe einfügen ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, wx, wy, wwidth, wheight).Select 'Shape rotieren Selection.ShapeRange.IncrementRotation wrotation 'Ausrichtung in der Mitte und Text zentriert (das ist wichtig, falls die Schriftart nicht genau passt) If wrotation = 90 Then Selection.ShapeRange.TextFrame2.VerticalAnchor = msoAnchorMiddle Else Selection.ShapeRange.TextFrame2.VerticalAnchor = msoAnchorTop End If Selection.ShapeRange.TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter 'noch einen Namen vergeben Selection.Name = "W_" & word 'Wort in den Text einfügen Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = word 'alle Ränder auf 0 setzen Selection.ShapeRange.TextFrame2.MarginLeft = 0 Selection.ShapeRange.TextFrame2.MarginRight = 0 Selection.ShapeRange.TextFrame2.MarginTop = 0 Selection.ShapeRange.TextFrame2.MarginBottom = 0 'Textumbrechen nicht zulassen Selection.ShapeRange.TextFrame2.WordWrap = msoFalse 'Falls Text größer ist als Shape, darf dieser über das Shape hinausragen Selection.ShapeRange.TextFrame.HorizontalOverflow = xlOartHorizontalOverflowOverflow 'Schrift-Eigenschaften setzen With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, Len(word)).Font .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = wcolor .Fill.Transparency = 0 .Fill.Solid .size = wsize .Name = wfont End With 'Shape nicht füllen Selection.ShapeRange.Fill.Visible = msoFalse 'keine Umrisslinien verwenden Selection.ShapeRange.Line.Visible = msoFalse End If Loop Until word = "" 'Wiederholen bis eine leere Zeile kommt End Sub 'Word Cloud löschen Sub WordcloudRemove() Dim i As Integer Dim shp As Shape 'alle Shapes auf dem Blatt durchlaufen For Each shp In ActiveSheet.Shapes If Left$(shp.Name, 2) = "W_" Then 'wenn ein Shape mit W_ beginnt, dann gehört es zur Word Cloud und wird gelöscht shp.Delete End If Next End Sub
Die Word Cloud generieren
Die Funktion WordcloudInsert ist über den Button Word Cloud einfügen verfügbar. Bei jedem Klick wird auf dem aktuellen Arbeitsblatt die Word Cloud neu generiert. Sie können aber auch die Funktionen zum Einfügen und Löschen auch direkt über Makros ausführen.
Je nach Word Cloud ist aber ein wenig Nacharbeit notwendig. Das Ergebnis sehen Sie in diesem Vergleich.
Links ist die vom VBA-Makro generierte Word Cloud, rechts das Original aus dem HTML-Dokument erzeugt über D3.js.
Los geht‘s
Ein bisschen Nacharbeit, denke ich, ist okay. Damit haben Sie im Gegenzug alle Möglichkeiten, die Word Cloud mit Office-Mitteln zu formatieren oder Texte ein wenig anzupassen. Mit der Konvertierung in universelle Office Shapes stehen Ihnen auch für andere Office Anwendungen wie Word oder PowerPoint zur Verfügung.
Der Austausch erfolgt durch Copy & Paste. Damit das sicher funktioniert, gruppieren Sie vor dem Kopieren alle Elemente der Word Cloud. Dadurch werden die Positionen zueinander eingefroren und beim Einfügen in andere Office-Anwendungen gibt es keine Überraschungen.
Viel Spaß beim Experimentieren mit Word Clouds!
Download
Links
Artikel Word Clouds im Büro
Mehr zum Thema Word Clouds in meinem Blog
Wikipedia Schlagwortwolke: https://de.wikipedia.org/wiki/Schlagwortwolke