Word Clouds in Microsoft Office als Shapes

Word Cloud als Excel Shapes

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.

Von d3.js erzeugte Parameter der Word Cloud
Von d3.js erzeugte Parameter der Word Cloud

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).

Word Cloud für Excel exportieren
Word Cloud für Excel exportieren

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.

Funktion TEXT IN SPALTEN mit Trennzeichen Komma
Funktion TEXT IN SPALTEN mit Trennzeichen Komma

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.

Vergleich Excel Import (links) mit HTML-Dokument (rechts)
Vergleich der Import Routine in Excel (links) mit dem Original aus dem HTML-Dokument (rechts)

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

Kommentar verfassen