Wikify Excel Spreadsheets

From NesevoWiki
Revision as of 18:12, 18 February 2008 by Philipp (talk | contribs)
Jump to navigationJump to search

Beschreibung

Das ist eine Vorversion eines VBA-Makro für Excel. Damit kann jede Excel-Tabelle sofort ohne Umwege in eine Textdatei geschrieben werden, welche dann im Wiki einfach nur eingefügt werden muss.

Anleitung zum VBA-Makro

Im Prinzip: Einfach in einem Modul im VBA-Editor einfügen und starten.
Die folgende Anleitung kann für andere Excel-Versionen leicht abweichen:

  1. Mit Excel die Datei öffnen, die umgewandelt werden soll
  2. Den VBA-Editor öffnen (Menü: Extras/Makro/Visual-Basic-Editor) oder 'Alt-F11'
  3. In der linken Spalte sind die geöffnetet Dokumente angezeigt
  4. Dort auf 'VBA-Projekt' (mit dem Namen des aktuellen Dokuments, also nicht bei Eurotools!) mit der rechten Maustaste hinklicken
  5. Im Kontextmenü Einfügen/Modul wählen
  6. Im rechten grossen Fenster erscheint eine leere weisse Seite (evtl. steht oben Option Explicit)
  7. Den gesamten Quelltext unten kopieren und auf diese leere weisse Seite einfügen
  8. Das Makro ausführen (Die Variablen Startspalte, Startzeile, Endspalte, Endzeile und Dateiname werden automatisch bei jedem Start abgefragt)


VBA-Makro

'Delimeter & Formatierungstags
Const TabellenBeginn = "{| border = " & """" & "1" & """"
Const TabellenEnde = "|}"
Const ZeilenStartDelimeter = "|"
Const ZeilenEndDelimeter = ""
Const ZeilenTrennzeichen = "|-"
Const Delimeter = "|"  'SpaltenTrennzeichen
'-----------------------------------------------------
Sub Tabelle2Wiki()
  Dim fHandle, i, j As Integer
  Dim StartZeile, StartSpalte, EndZeile, EndSpalte As Integer
  fHandle = FreeFile()
  StartZeile = Val(InputBox("Ab welcher Zeile soll umgewandelt werden ?", _
                            "Startzeile - Schritt 1 von 5", "1"))
  'nach belieben als Zahl eintragen a=1, z=26
  StartSpalte = Val(InputBox("Ab welcher Spalte soll umgewandelt werden ?" + _
                    vbCrLf + "(z.B. A=1, Z=26, AG=33)", _
                    "Startspalte - Schritt 2 von 5", "1"))
  EndZeile = Val(InputBox("Bis zu welcher Zeile soll umgewandelt werden ?", _
                            "Endzeile - Schritt 3 von 5", "100"))
  
  'nach belieben als Zahl eintragen a=1, z=26, Spalte AG = z+7=33
  EndSpalte = Val(InputBox("Bis zu welcher Spalte soll umgewandelt werden ?" + _
                    vbCrLf + "(z.B. A=1, Z=26, AG=33)", _
                    "Endspalte - Schritt 4 von 5", "26"))
  DateiName = InputBox("Wie soll die Ausgabedatei heissen (bitte ggf. den Pfad ergänzen) ?", _
                            "Dateiname - Schritt 5 von 5", "wiki-tabelle.txt")   
  Open DateiName For Output As #fHandle
   Print #fHandle, TabellenBeginn      'Beginn der Tabelle
   For i = StartZeile To EndZeile
        For j = StartSpalte To EndSpalte
            Print #fHandle, ZelleLesen(i, j)
        Next j
        Print #fHandle, ZeilenTrennzeichen
   Next i
  Print #fHandle, TabellenEnde      'Ende der Tabelle
  Close #fHandle
End Sub
Function ZelleLesen(Zeile, Spalte)
Dim Inhalt, RGB_Code, FormatierungsTags As Variant
    '------------------Wenn die Zelle ein datum enthält, entsprechend formatieren------------------------------
    If VarType(Cells(Zeile, Spalte)) = vbDate Then
        Inhalt = Format(Cells(Zeile, Spalte), "dd.mm.yyyy")
    Else
        Inhalt = Cells(Zeile, Spalte)
    End If
    '------------------Wenn Zelle leer, Space einstellen für korrekte Darstellung im Wiki----------------------
    If Inhalt = "" Then Inhalt = " "
    '------------------Zeilenumbrüche innerhalb der Zelle durch Space ersetzen---------------------------------
    While InStr(1, Inhalt, Chr(10)) <> 0
        Inhalt = Mid(Inhalt, 1, InStr(1, Inhalt, Chr(10)) - 1) & " " & Mid(Inhalt, InStr(1, Inhalt, Chr(10)) + 1)
    Wend
    '------------------Textinhalt der Zelle auf Fett bzw. kursiv formatieren------------------------------------
    If ActiveSheet.Cells(Zeile, Spalte).Font.Bold = vbTrue And ActiveSheet.Cells(Zeile, Spalte) <> "" Then
        Inhalt = "'''" & Inhalt & "'''"
    End If
    If ActiveSheet.Cells(Zeile, Spalte).Font.Italic = vbTrue And ActiveSheet.Cells(Zeile, Spalte) <> "" Then
        Inhalt = "''" & Inhalt & "''"
    End If
    '------------------Hintergrundfarbe der Zelle in Wiki-Tags umsetzen-----------------------------------------
    If Hex(ActiveSheet.Cells(Zeile, Spalte).Interior.Color) <> "FFFFFF" Then
        RGB_Code = Format(Hex(ActiveSheet.Cells(Zeile, Spalte).Interior.Color), "000000")
        While Len(RGB_Code) < 6
            RGB_Code = "0" & RGB_Code
        Wend
        FormatierungsTags = """" & "style=background-color:#" & RGB_Code & ";" & """"
    Else
        FormatierungsTags = ""
    End If
    '------------------Horizontale Textausrichtung der Zelle in Wiki-Tags umsetzen------------------------------
    If ActiveSheet.Cells(Zeile, Spalte).HorizontalAlignment = xlCenter Then
        FormatierungsTags = "align=" & """" & "center" & """" & FormatierungsTags
    End If
    If ActiveSheet.Cells(Zeile, Spalte).HorizontalAlignment = xlRight Then
        FormatierungsTags = "align=" & """" & "right" & """" & FormatierungsTags
    End If
    '------------------Zelleintrag zusammensetzen---------------------------------------------------------------
    ZelleLesen = Delimeter & FormatierungsTags & Delimeter & Inhalt
End Function