Excel: Formatierungen für CSV Export

10 Oktober 2009 in Code Snippets Kommentieren »

Diesmal geht es um ein kleines Excel Makro. Gefragt war nach einer Möglichkeit um grundlegende Schriftformatierungen wie Fett- und Kursivschrift, sowie unterstrichenen Text bei einem Export ins CSV Format zu übernehmen. Die Funktion geht alle Zellen der ersten Tabelle durch und schließt formatierten Text in folgenden Zeichen ein:

  • *Fettschrift*
  • /Kursiv/
  • _Unterstrichen_

Dadurch bleibt die Formatierung auch bei der späteren Verarbeitung der CSV Daten erhalten.

Sub Excel2CSV()

  ' Eine Zelle
  Dim myCell As Range

  ' Temporärer Zelleninhalt
  Dim tmpText As String

  ' Zellenlänge und Schleifenvariable
  Dim cellLen As Integer
  Dim i As Integer

  ' Formatierungen geöffnet
  Dim openBold As Boolean
  Dim openItalic As Boolean
  Dim openUnderlined As Boolean

  ' Formatierungen des aktuellen Zeichens
  Dim isBold As Boolean
  Dim isItalic As Boolean
  Dim isUnderlined As Boolean

  ' Die erste Tabelle
  Set myTable = Sheets(1).UsedRange

  ' Alle Zellen in der Tabelle durchlaufen
  For Each myCell In myTable

    openBold = False
    openItalic = False
    openUnderlined = False

    tmpText = ""

    cellLen = myCell.Characters.Count

    ' Prüfen ob in der Zelle etwas steht
    If cellLen > 0 Then

      ' Alle Zeichen durchlaufen
      For i = 1 To cellLen

        ' Fettschrift ermitteln
        isBold = myCell.Characters(i, 1).Font.Bold

        ' Kursiv ermitteln
        isItalic = myCell.Characters(i, 1).Font.Italic

        ' Unterstrichen ermitteln
        If myCell.Characters(i, 1).Font.Underline = xlUnderlineStyleNone Then
          isUnderlined = False
        Else
          isUnderlined = True
        End If

        ' Zeichenformatierung mit aktueller vergleichen und entsprechende
        ' Formatzeichen einfügen
        If Not openBold = isBold Then
          tmpText = tmpText + "*"
          openBold = isBold
        End If

        If Not openItalic = isItalic Then
          tmpText = tmpText + "/"
          openItalic = isItalic
        End If

        If Not openUnderlined = isUnderlined Then
          tmpText = tmpText + "_"
          openUnderlined = isUnderlined
        End If

        ' Zeichen übertragen
        tmpText = tmpText + myCell.Characters(i, 1).Text

      Next i

      ' Offene Formatierungen am Ende schließen
      If openBold Then
        tmpText = tmpText + "*"
      End If

      If openItalic Then
        tmpText = tmpText + "_"
      End If

      If openUnderlined Then
        tmpText = tmpText + "_"
      End If

      ' Neuen Zelleninhalt übertragen
      myCell = tmpText

    End If

  Next myCell

End Sub

Dies ist mehr oder weniger mein erstes Excel Makro und ich bin kein VB Experte, daher kann es gut sein, dass Optimierungen möglich sind ;)

Einen Kommentar hinterlassen